簡體   English   中英

Kotlin 中的 Android Room 錯誤

[英]Android Room Bug in Kotlin

我認為這是在使用 Kotlin 時 Room 中的語義問題。 Room中簡單的DAO查詢可以通過

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

雖然,我將返回類型定義為User ,而不是User? ,當沒有具有給定id 的用戶時,此查詢仍然可以返回 null。

所以每當你調用這個函數時,你肯定需要檢查null返回,如下

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

但是由於我們將getUser返回類型定義為User ,@kotlin 編譯器建議null檢查是多余的

我錯過了什么嗎? 任何人都可以對此提供一些反饋嗎?

沒有語義問題。 如果您的函數可以返回空值,則應在函數返回類型中定義它。 所以,你的函數簽名應該是這樣的

fun getUser(id: Int): User?

這意味着該函數可以返回 null,現在您的 null 檢查應該可以正常工作。

顯然它已經在谷歌問題跟蹤器中跟蹤問題 作為回應他們開發人員說

狀態:無法修復(預期行為)

不過,這與生成的代碼無關,您是創建該 Query 方法的人,因此您應該將其聲明為可為空的。

所以,如果我們知道我們的代碼可以返回null ,我們應該將其聲明為Nullable

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM