[英]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.