我正在尝试将我的一些Android Java POJO类迁移到Kotlin。其中一些类在中用作Room实体。
根据Defining data using Room entities的文档,getters和setters将在JavaBean约定中命名。
如果您使用getter和setter方法,请记住它们是基于房间中的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错误或缺少数据库(没有这样的列: enabled)
这似乎是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实体的某些东西,比如注释或不同的命名方案?
发布于 2018-10-08 02:27:39
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约定,所以我只是修改了查询。
var enabled: Boolean
生成这些方法
public Boolean getEnabled();
public void setEnabled();
发布于 2018-10-07 02:33:10
嗯,我相信“is”getter是为JavaBeans中的布尔值自动创建的。
所以,你只需要让你的变量“启用”即可。
我怀疑您可以使用isIsEnabled获得现有布尔变量的值。
https://stackoverflow.com/questions/52681079
复制相似问题