为什么房间实体不能在Android中使用不可变属性
我一直在探索房间数据库对象映射库,我觉得奇怪。
正如这个答案所暗示的,实体数据模型不能具有不可变属性。
但我检查了谷歌与kotlin持久的例子 , Room
工程与不可改变的属性。 请从示例中检查这个数据类。
什么可能是这种行为的原因?
如果我们可以创建不可变的值( val
属性),这可能是一个很好的function,因为这限制了程序员在创建对象之后更改唯一标识符(如id)。
这很奇怪,因为我可以让我的实体类使用val
的所有我的领域没有问题
@Entity(tableName = "repo") data class RepoEntity( @PrimaryKey @ColumnInfo(name = "id") @SerializedName("id") val id: Int, @ColumnInfo(name = "name") @SerializedName("name") val name: String, @ColumnInfo(name = "full_name") @SerializedName("full_name") val fullName: String, @Embedded(prefix = "owner") @SerializedName("owner") val owner: RepoOwnerEntity, @ColumnInfo(name = "html_url") @SerializedName("html_url") val htmlUrl: String, @ColumnInfo(name = "description") @SerializedName("description") val description: String? )
数据仍然正确存储在数据库中。
我认为这个问题来自某些不能构造参数的领域。 从@Relation
注释的Javadoc:
请注意
@Relation
注释的字段不能是一个构造函数参数,它必须是公共的或有一个公共setter。
作为一种解决方法,我有一个私人的构造函数参数_myRelationProperty
和一个公共字段:
val myRelationProperty: List