ฉันกำลังพยายามหาห้อง ( https://developer.android.com/topic/library/architecture/room ) ทำงานร่วมกับคลาสอินไลน์ของ Kotlin ตามที่อธิบายไว้ในบทความ Jake Whartons Inline Classes Make ID ฐานข้อมูลที่ยอดเยี่ยม :
@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 เป็นคุณสมบัติเอนทิตีข้อมูล