Ich versuche, Room ( https://developer.android.com/topic/libraries/architecture/room ) mit Kotlins Inline-Klassen zum Laufen zu bringen, wie in Jake Whartons Artikel Inline Classes Make Great Database IDs beschrieben :
@Entity
data class MyEntity(
@PrimaryKey val id: ID,
val title: String
)
inline class ID(val value: String)
Beim Kompilieren beschwert sich dieser Raum darüber
Entitäten und Pojos müssen einen verwendbaren öffentlichen Konstruktor haben. Sie können einen leeren Konstruktor oder einen Konstruktor haben, dessen Parameter mit den Feldern übereinstimmen (nach Name und Typ).
Wenn ich mir den generierten Java-Code anschaue, finde ich:
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);
}
Auf mysteriöse Weise ist der Standardkonstruktor jetzt privat.
Bei Verwendung String
als Typ für id
(oder a typealias
) sieht der generierte Java-Klassenkonstruktor wie erwartet aus:
public MyEntity(@NotNull String id, @NotNull String title) {
Intrinsics.checkParameterIsNotNull(id, "id");
Intrinsics.checkParameterIsNotNull(title, "title");
super();
this.id = id;
this.title = title;
}
Kann jemand jetzt den Standardkonstruktor öffentlich halten, während Inline-Klassen als Datenentitätseigenschaften verwendet werden?