Java 如何正确处理NPE
我想正确处理NPE警告 例如:Java 如何正确处理NPE,java,nullpointerexception,Java,Nullpointerexception,我想正确处理NPE警告 例如: @Nullable LiveData<User> currentUser; LiveData<List<Medication>> getUserMeds() { return parent.getMedsForUser(this.currentUser.getValue().getId()); } 我目前正在检查none null值,以确保不会在函数外部造成混乱,但如果在函数内部实现它,我会感觉更好。在返回函数内部的
@Nullable
LiveData<User> currentUser;
LiveData<List<Medication>> getUserMeds() {
return parent.getMedsForUser(this.currentUser.getValue().getId());
}
我目前正在检查none null值,以确保不会在函数外部造成混乱,但如果在函数内部实现它,我会感觉更好。在返回函数内部的值之前执行检查:
LiveData getUserMeds(){
如果(this.currentUser==null)返回“某个默认值或引发异常”
返回parent.getmedsforser(this.currentUser.getValue().getId());
}
这完全取决于您要创建的逻辑类型
解释
您收到此警告的原因是,如果其中一个将返回null
,它将崩溃,因为您遇到了类似null.method()
的情况,这显然无法工作
注释 您可以使用您似乎已经熟悉的注释(
@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.currentUser
与null
进行显式比较。
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