为了账号安全,请及时绑定邮箱和手机立即绑定

带有 DAO 的 Android Room 实体布尔值:Kotlin 与 Java

带有 DAO 的 Android Room 实体布尔值:Kotlin 与 Java

白衣染霜花 2021-11-03 10:47:23
我正在尝试将我的一些 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();


查看完整回答
反对 回复 2021-11-03
?
摇曳的蔷薇

TA贡献1793条经验 获得超6个赞

嗯,我相信“is”getter 是为 JavaBeans 中的布尔值自动创建的。

所以,你应该让你的变量“启用”。

我怀疑您可以使用 isIsEnabled 获取现有布尔变量的值。


查看完整回答
反对 回复 2021-11-03

没有找到匹配的内容?试试慕课网站内搜索吧

添加回答

代码语言

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号