Hel*_*oCW 6 android android-room android-jetpack
我正在学习 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
}
Run Code Online (Sandbox Code Playgroud)
代码 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
}
Run Code Online (Sandbox Code Playgroud)
类构造函数内属性的声明data用于:
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
}
Run Code Online (Sandbox Code Playgroud)
优点:
注意:不能显式提供方法(在数据类内部)copy。component在示例 B 中,gardenPlantingId替换为idso 可以删除。
| 归档时间: |
|
| 查看次数: |
146 次 |
| 最近记录: |