代码之家  ›  专栏  ›  技术社区  ›  musooff

Kotlin的Android房间漏洞

  •  1
  • musooff  · 技术社区  · 7 年前

    我认为在Kotlin工作时,房间里的语义问题。 简单 DAO 房间内的查询可通过以下方式获得:

    @Query("SELECT * FROM Users WHERE id = :id")
    fun getUser(id: Int): User
    

    User User? 用户 与给定的 身份证件 .

    因此,无论何时调用此函数,都必须检查 null 返回,如下所示

    val user = userDao.getUser("someid")
    if (user != null){
        return user
    }
    else {
        return DEFAULT_USER
    }
    

    getUser 作为 ,@kotlin编译器建议 支票是

    我错过什么了吗?有人能对此给出一些反馈吗?

    2 回复  |  直到 7 年前
        1
  •  1
  •   karandeep singh    7 年前

    没有语义问题。如果函数可以返回null,则应该在函数返回类型中定义它。你的函数签名应该是这样的

    fun getUser(id: Int): User?
    

        2
  •  0
  •   musooff    7 年前

    显然它已经被追踪到了 Google Issue Tracker 作为回应,开发商说

    这与生成的代码无关 但是,您是创建该查询方法的人,因此您应该 声明为可空。

    所以,如果我们知道我们的代码可以返回 null ,我们应该宣布它为 Nullable

    @Query("SELECT * FROM Users WHERE id = :id")
    fun getUser(id: Int): User?