gpt4 book ai didi

android - 将 Kotlin 内联类作为实体字段的房间数据库

转载 作者:行者123 更新时间:2023-12-04 16:03:36 24 4
gpt4 key购买 nike

我正在尝试让 Room( https://developer.android.com/topic/libraries/architecture/room ) 与 Kotlin 的内联类一起工作,如 Jake Whartons article Inline Classes Make Great Database IDs 中所述:

@Entity
data class MyEntity(
@PrimaryKey val id: ID,
val title: String
)

inline class ID(val value: String)

编译这个房间时提示说

Entities and Pojos must have a usable public constructor. You can have an empty constructor or a constructor whose parameters match the fields (by name and type).



查看生成的 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);
}

神秘的是,默认构造函数现在是私有(private)的。

使用 String 时作为 id 的类型(或 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;
}

有人现在如何在使用内联类作为数据实体属性时保持默认构造函数是公开的?

最佳答案

我相信原因是 ID 类将在运行时表示为 String 。所以 $constructor_marker 附加参数是为了保证 MyEntity(String id, String title) 构造函数签名的唯一性,因为这个构造函数可能已经被定义了。但我只是在这里推测。

您能否尝试在 MyEntity 类中显式定义此构造函数并查看它是否有效?

关于android - 将 Kotlin 内联类作为实体字段的房间数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58203953/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com