Tôi đang cố gắng để Room ( https://developer.android.com/topic/lologists/arch architecture / room ) hoạt động với các lớp nội tuyến của Kotlin như được mô tả trong bài viết của Jake Whartons Các lớp nội tuyến Tạo ID cơ sở dữ liệu tuyệt vời :
@Entity
data class MyEntity(
@PrimaryKey val id: ID,
val title: String
)
inline class ID(val value: String)
Khi biên dịch Phòng này phàn nàn rằng
Các thực thể và Pojos phải có một nhà xây dựng công cộng có thể sử dụng. Bạn có thể có một hàm tạo trống hoặc hàm tạo có tham số khớp với các trường (theo tên và loại).
Nhìn vào mã Java được tạo, tôi thấy:
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);
}
Bí ẩn các nhà xây dựng mặc định là riêng tư bây giờ.
Khi sử dụng String
làm kiểu cho id
(hoặc a typealias
), hàm tạo của lớp Java được tạo trông giống như mong đợi:
public MyEntity(@NotNull String id, @NotNull String title) {
Intrinsics.checkParameterIsNotNull(id, "id");
Intrinsics.checkParameterIsNotNull(title, "title");
super();
this.id = id;
this.title = title;
}
Bây giờ có ai đó làm thế nào để giữ cho hàm tạo mặc định công khai trong khi sử dụng Lớp nội tuyến làm thuộc tính thực thể dữ liệu không?