首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >带DAO的Android房间实体布尔值: Kotlin vs Java

带DAO的Android房间实体布尔值: Kotlin vs Java
EN

Stack Overflow用户
提问于 2018-10-07 00:28:11
回答 2查看 2.9K关注 0票数 2

我正在尝试将我的一些Android Java POJO类迁移到Kotlin。其中一些类在中用作Room实体。

根据Defining data using Room entities的文档,getters和setters将在JavaBean约定中命名。

如果您使用getter和setter方法,请记住它们是基于房间中的JavaBeans约定的。

使用JavaBeans和一个布尔值字段,在Java语言中应该是这样的

代码语言:javascript
复制
@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引用

代码语言:javascript
复制
@Query("select * from myobject where enabled = 1")
public List<MyObject> loadEnabledObjects();

在Kotlin中,对象简化为

代码语言:javascript
复制
@Entity
class MyObject {
    // other stuff
    var isEnabled: Boolean = false
}

像以前一样使用DAO时,会出现编译时错误

错误:查询出现问题: SQLITE_ERROR SQL错误或缺少数据库(没有这样的列: enabled)

这似乎是Room实体在我的Kotlin版本中的行为不同,要使用DAO引用Kotlin版本,我必须将查询更改为使用isEnabled = 1

代码语言:javascript
复制
@Query("select * from myobject where isEnabled = 1")
public List<MyObject> loadEnabledObjects();

Defining data using Room entities上没有任何官方的Kotlin示例,在我更改所有DAO之前,我想确保这是正确的行为。

这是正确的吗,或者我是否遗漏了Kotlin实体的某些东西,比如注释或不同的命名方案?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-10-08 02:27:39

代码语言:javascript
复制
var isEnabled: Boolean

代码语言:javascript
复制
public Boolean isEnabled();
public void setEnabled();

为了在Kotlin中执行此操作并在DAO中使用它们,同时保持JavaBean约定,查询需要使用isEnabled

代码语言:javascript
复制
@Query("select * from myobject where isEnabled = 1")
public List<MyObject> loadEnabledObjects();

我仍然不确定为什么DAO在Kotlin下不能使用与在Java下相同的查询语法,因为它们都具有相同的方法和签名。因为我的代码都依赖于JavaBean约定,所以我只是修改了查询。

代码语言:javascript
复制
var enabled: Boolean

生成这些方法

代码语言:javascript
复制
public Boolean getEnabled();
public void setEnabled();
票数 2
EN

Stack Overflow用户

发布于 2018-10-07 02:33:10

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

所以,你只需要让你的变量“启用”即可。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52681079

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档