Почему объекты объекта не работают с неизменяемыми свойствами в Android

Я изучал Room библиотеку сопоставления объектов базы данных, и я понял что-то странное.

Модель данных сущности не может иметь неизменяемых свойств, как предлагает этот ответ.

Но я проверил постоянный пример google с kotlin, Room также работает с неизменяемыми свойствами. Пожалуйста, проверьте этот класс данных из примера.

Что может быть причиной такого поведения?

Это может быть хорошей возможностью, если мы можем создать неизменяемые значения (val properties), поскольку это ограничивает программистов от изменения уникальных идентификаторов, таких как идентификаторы после создания объекта.

Ответ 1

Это странно, потому что я могу сделать свой класс Entity с помощью 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?
)

И данные сохраняются правильно в базе данных. введите описание изображения здесь

Ответ 2

Я считаю, что проблема связана с определенными полями, которые не могут быть параметрами конструктора. Из Javadoc аннотации @Relation:

Обратите внимание, что аннотированное поле @Relation не может быть параметром конструктора, оно должно быть открытым или иметь открытый установщик.

В качестве обходного пути у меня был закрытый параметр конструктора _myRelationProperty и открытое поле:

val myRelationProperty: List<MyThings> get() = _myRelationProperty