我想正確處理 NPE 警告。例子:@NullableLiveData<User> currentUser;LiveData<List<Medication>> getUserMeds() { return parent.getMedsForUser(this.currentUser.getValue().getId());}為方法顯示兩個 NPE 警告getValue()getId()我目前正在通過檢查非空值來確保我不會在函數(shù)外部弄亂,但我會覺得在函數(shù)內(nèi)部實(shí)現(xiàn)它會更好。
2 回答

一只斗牛犬
TA貢獻(xiàn)1784條經(jīng)驗 獲得超2個贊
在函數(shù)內(nèi)部返回值之前執(zhí)行檢查:
LiveData<List<Medication>> getUserMeds() { if (this.currentUser == null) return "Some default value or throw an Exception" return parent.getMedsForUser(this.currentUser.getValue().getId()); }

拉風(fēng)的咖菲貓
TA貢獻(xiàn)1995條經(jīng)驗 獲得超2個贊
這完全取決于您要創(chuàng)建哪種邏輯。
解釋
您收到此警告的原因是,如果其中一個返回null
,它會崩潰,因為您遇到類似 的情況null.method()
,這顯然無法正常工作。
注釋
您可以使用您已經(jīng)熟悉的注釋 (@Nullable
和@NotNull
)。然后你的框架可以確保正確的屬性,你可以依賴它。
處理好自己
您還可以在您的方法中顯式處理大小寫,例如:
Value value = currentUser.getValue();
if (value == null) {
// TODO Handle the case ...
}
Id id = value.getId();
if (id == null) {
// TODO Handle the case ...
}
// They are now safe to use
筆記
但是,如果您無法真正處理這種情況,而只會因異常而崩潰,那么處理它并沒有真正的好處。
請注意,這this
在您的代碼中已過時,因為您在字段和局部變量之間沒有名稱沖突。
添加回答
舉報
0/150
提交
取消