为什么房间实体不能在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 get() = _myRelationProperty