gpt4 book ai didi

android - 为什么作者在 Room with Android Jetpack 的两个位置定义表格字段?

转载 作者:行者123 更新时间:2023-12-03 14:15:46 25 4
gpt4 key购买 nike

我正在学习 Android Jetpack,以下代码来自 https://github.com/android/sunflower 的示例项目.

GardenPlanting.kt代码是设计一个表格,我很奇怪为什么作者在两个位置定义表格字段,你看@PrimaryKey(autoGenerate = true) @ColumnInfo(name = "id")位于类的内部。

我认为代码 B 很容易理解,对吧?

GardenPlanting.kt

@Entity(
tableName = "garden_plantings",
foreignKeys = [
ForeignKey(entity = Plant::class, parentColumns = ["id"], childColumns = ["plant_id"])
],
indices = [Index("plant_id")]
)

data class GardenPlanting(
@ColumnInfo(name = "plant_id") val plantId: String,

@ColumnInfo(name = "plant_date") val plantDate: Calendar = Calendar.getInstance(),

@ColumnInfo(name = "last_watering_date")
val lastWateringDate: Calendar = Calendar.getInstance()
) {
@PrimaryKey(autoGenerate = true)
@ColumnInfo(name = "id")
var gardenPlantingId: Long = 0
}

代码 B
data class GardenPlanting(
@PrimaryKey(autoGenerate = true) @ColumnInfo(name = "id") val id: String,

@ColumnInfo(name = "plant_id") val plantId: String,

@ColumnInfo(name = "plant_date") val plantDate: Calendar = Calendar.getInstance(),

@ColumnInfo(name = "last_watering_date")
val lastWateringDate: Calendar = Calendar.getInstance()
) {

var gardenPlantingId: Long = 0
}

最佳答案

data 中的属性声明类构造函数用于:

  • 生成component破坏函数
  • toString() 中使用这些字段, equals() , hashCode() , 和 copy()

  • 因此,如果您想避免使用 copy 复制字段方法那么简单的方法是在类的主体内声明字段。

    例子:
    fun main() {
    val user = User("Pavneet", "29k+")
    user.id = kotlin.random.Random.nextInt(10, 20)
    val userCopy = user.copy()
    println(userCopy) // id won't be printed 'cuz it's not a part of toString method
    userCopy.id = 99
    print(userCopy.equals(user)) // true, 'cuz id is not being used by the equals method
    //var(name, repo, id) = userCopy // error, User must have a 'component3()' function
    var(name, repo) = userCopy

    }

    data class User(val name: String = "", val repo:String="0"){
    var id:Int = 0
    }

    优点:
  • 创建对象的副本,不包括特定字段
  • 排除特定字段以比较两个对象是否等于
  • 排除解构声明中的特定字段

  • 注: copycomponent不能显式提供方法(在数据类内部)。在示例 B 中, gardenPlantingId替换为 id所以可以去掉。

    关于android - 为什么作者在 Room with Android Jetpack 的两个位置定义表格字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60484372/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com