Saya mencoba mendapatkan Room ( https://developer.android.com/topic/libraries/architecture/room ) bekerja dengan kelas inline Kotlin seperti yang dijelaskan dalam artikel Jake Whartons artikel Kelas Inline Membuat ID Database yang Hebat :
@Entity
data class MyEntity(
@PrimaryKey val id: ID,
val title: String
)
inline class ID(val value: String)
Saat menyusun Kamar ini mengeluh itu
Entitas dan Pojo harus memiliki konstruktor publik yang dapat digunakan. Anda dapat memiliki konstruktor kosong atau konstruktor yang parameternya cocok dengan bidang (berdasarkan nama dan jenis).
Melihat ke kode Java yang dihasilkan saya menemukan:
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);
}
Secara misterius konstruktor default bersifat pribadi sekarang.
Saat menggunakan String
sebagai tipe untuk id
(atau a typealias
), konstruktor kelas Java yang dihasilkan tampak seperti yang diharapkan:
public MyEntity(@NotNull String id, @NotNull String title) {
Intrinsics.checkParameterIsNotNull(id, "id");
Intrinsics.checkParameterIsNotNull(title, "title");
super();
this.id = id;
this.title = title;
}
Apakah seseorang sekarang bagaimana membuat konstruktor default tetap publik saat menggunakan Kelas Inline sebagai properti entitas data?