Estou tentando fazer com que o Room ( https://developer.android.com/topic/libraries/architecture/room ) trabalhe com as classes embutidas do Kotlin, conforme descrito no artigo de Jake Whartons Classes embutidas produzem ótimas IDs de banco de dados :
@Entity
data class MyEntity(
@PrimaryKey val id: ID,
val title: String
)
inline class ID(val value: String)
Ao compilar esta sala, reclama-se que
Entidades e Pojos devem ter um construtor público utilizável. Você pode ter um construtor vazio ou um construtor cujos parâmetros correspondam aos campos (por nome e tipo).
Analisando o código Java gerado, encontro:
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);
}
Misteriosamente, o construtor padrão é privado agora.
Ao usar String
como um tipo para id
(ou a typealias
), o construtor de classe Java gerado se parece com o esperado:
public MyEntity(@NotNull String id, @NotNull String title) {
Intrinsics.checkParameterIsNotNull(id, "id");
Intrinsics.checkParameterIsNotNull(title, "title");
super();
this.id = id;
this.title = title;
}
Alguém agora como manter público o construtor padrão ao usar Classes Inline como propriedades da entidade de dados?