我正在尝试将我的一些 Android Java POJO 类迁移到 Kotlin。其中一些类用作房间实体。根据使用 Room 实体定义数据的文档,getter 和 setter 将在 JavaBean 约定中命名。如果您使用 getter 和 setter 方法,请记住它们基于 Room 中的 JavaBeans 约定。有了 JavaBeans 和一个布尔字段,在 Java 中应该是这样的@Entitypublic class MyObject { // other stuff public MyObject() { this.enabled = false; } public boolean isEnabled() { return this.enabled; } public void setEnabled(boolean enabled) { this.enabled = enabled; }}现在在 DAO 中,可以这样引用 enabled = 1@Query("select * from myobject where enabled = 1")public List<MyObject> loadEnabledObjects();在 Kotlin 中,对象简化为这个@Entityclass MyObject { // other stuff var isEnabled: Boolean = false}像以前一样使用 DAO 时,会出现编译时错误错误:查询有问题:[SQLITE_ERROR] SQL 错误或缺少数据库(没有该列:已启用)这似乎是 Room 实体在我的 Kotlin 版本中的行为不同,要使用 DAO 引用 Kotlin 版本,我必须更改查询以使用 isEnabled = 1@Query("select * from myobject where isEnabled = 1")public List<MyObject> loadEnabledObjects();没有任何关于使用 Room 实体定义数据的官方 Kotlin 示例,我想在更改所有 DAO 之前确保这是正确的行为。这是正确的,还是我遗漏了 Kotlin Entity 这样的注释或不同的命名方案?
2 回答

慕的地6264312
TA贡献1817条经验 获得超6个赞
检查生成的字节码后,这个 Kotlin 代码
var isEnabled: Boolean
创建以下方法
public Boolean isEnabled();
public void setEnabled();
为了在 Kotlin 中做到这一点并在 DAO 中使用它们同时保持 JavaBean 约定,查询需要使用 isEnabled
@Query("select * from myobject where isEnabled = 1")
public List<MyObject> loadEnabledObjects();
我仍然不确定为什么 DAO 在 Kotlin 下不能使用与 Java 下相同的查询语法,因为它们都具有相同的方法和签名。由于我的代码都依赖于 JavaBean 约定,因此我刚刚更改了查询。
只是为了添加注释,我在检查生成的字节码时遇到了这个 Kotlin 代码
var enabled: Boolean
生成这些方法
public Boolean getEnabled();
public void setEnabled();

摇曳的蔷薇
TA贡献1793条经验 获得超6个赞
嗯,我相信“is”getter 是为 JavaBeans 中的布尔值自动创建的。
所以,你应该让你的变量“启用”。
我怀疑您可以使用 isIsEnabled 获取现有布尔变量的值。
添加回答
举报
0/150
提交
取消