我正在尝试将一些Android Java POJO类迁移到Kotlin . 其中一些类用作房间实体 .
根据Defining data using Room entities的文档,getter和setter将在JavaBean约定中命名 .
如果使用getter和setter方法,请记住它们基于Room中的JavaBeans约定 .
使用JavaBeans和布尔字段,在Java中应该是这样的
@Entity
public 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中,对象减少到此
@Entity
class 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();
Defining data using Room entities上没有任何正式的Kotlin示例,我想在更改所有DAO之前确保这是正确的行为 .
这是正确的,还是我错过了与Kotlin实体这样的注释或不同的命名方案?
2 回答
检查生成的字节码后,这个Kotlin代码
创建以下方法
为了在Kotlin中执行此操作并在保留JavaBean约定的同时在DAO中使用它们,查询需要使用
isEnabled
我仍然不确定为什么DAO不能在Kotlin下使用与Java相同的查询语法,因为它们都具有相同的方法和签名 . 由于我的代码都依赖于JavaBean约定,我刚刚更改了查询 .
只是为了补充说明,我遇到了检查生成的字节码,这个Kotlin代码
生成这些方法
嗯,我相信在JavaBeans中为布尔值自动创建“是”getter .
所以,你应该让你的变量“启用” .
我怀疑你可以使用isIsEnabled获取现有布尔变量的值 .