私はRoom(https://developer.android.com/topic/libraries/architecture/room)を、Jake Whartonsの記事Inline Classes Make Great Database IDsに記載されているKotlinのインラインクラスと連携させようとしています:
@Entity
data class MyEntity(
@PrimaryKey val id: ID,
val title: String
)
inline class ID(val value: String)
このルームをコンパイルすると、
エンティティとPojoには、使用可能なパブリックコンストラクターが必要です。空のコンストラクターを持つことも、パラメーターが(名前とタイプによって)フィールドに一致するコンストラクターを持つこともできます。
私が見つけた生成された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
型として使用する場合、生成されたJavaクラスコンストラクターは期待どおりに見えます。id
typealias
public MyEntity(@NotNull String id, @NotNull String title) {
Intrinsics.checkParameterIsNotNull(id, "id");
Intrinsics.checkParameterIsNotNull(title, "title");
super();
this.id = id;
this.title = title;
}
誰かが、インラインクラスをデータエンティティプロパティとして使用しながら、デフォルトのコンストラクターをパブリックに保つ方法を教えてください。
いくつかの課題トラッカーでこの問題を提起しましたか?これは確かに明確にする必要があると思います
—
K.Os