Я намагаюся змусити кімнату ( https://developer.android.com/topic/libraries/architecture/room ) працювати з вбудованими класами Котліна, як описано в статті Джейк Уортонс. Inline Classes зробити великі ідентифікатори бази даних :
@Entity
data class MyEntity(
@PrimaryKey val id: ID,
val title: String
)
inline class ID(val value: String)
При складанні цієї кімнати скаржиться на це
Суб'єкти та Pojos повинні мати придатний громадський конструктор. Ви можете мати порожній конструктор або конструктор, параметри якого відповідають полям (за назвою та типом).
Переглядаючи створений код Java, я знаходжу:
private MyEntity(String id, String title) {
this.id = id;
this.title = title;
}
// $FF: synthetic method
public MyEntity(String id, String title, DefaultConstructorMarker $constructor_marker) {
this(id, title);
}
Загадково конструктор за замовчуванням зараз приватний.
Використовуючи String
як тип для id
(або a typealias
), створений конструктор класу Java виглядає очікуваним:
public MyEntity(@NotNull String id, @NotNull String title) {
Intrinsics.checkParameterIsNotNull(id, "id");
Intrinsics.checkParameterIsNotNull(title, "title");
super();
this.id = id;
this.title = title;
}
Хтось зараз, як зберегти конструктор за замовчуванням загальнодоступним під час використання Inline Classes як властивості сутності даних?