猿问

如何正确处理NPE

我想正确处理 NPE 警告。


例子:


@Nullable

LiveData<User> currentUser;


LiveData<List<Medication>> getUserMeds() {

    return parent.getMedsForUser(this.currentUser.getValue().getId());

}

为方法显示两个 NPE 警告


getValue()

getId()

我目前正在通过检查非空值来确保我不会在函数外部弄乱,但我会觉得在函数内部实现它会更好。


慕后森
浏览 113回答 2
2回答

一只斗牛犬

在函数内部返回值之前执行检查:LiveData<List<Medication>>&nbsp;getUserMeds()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(this.currentUser&nbsp;==&nbsp;null)&nbsp;return&nbsp;"Some&nbsp;default&nbsp;value&nbsp;or&nbsp;throw&nbsp;an&nbsp;Exception" &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;parent.getMedsForUser(this.currentUser.getValue().getId()); }

拉风的咖菲猫

这完全取决于您要创建哪种逻辑。解释您收到此警告的原因是,如果其中一个返回null,它会崩溃,因为您遇到类似 的情况null.method(),这显然无法正常工作。注释您可以使用您已经熟悉的注释 (@Nullable和@NotNull)。然后你的框架可以确保正确的属性,你可以依赖它。处理好自己您还可以在您的方法中显式处理大小写,例如:Value value = currentUser.getValue();if (value == null) {&nbsp; &nbsp; // TODO Handle the case ...}Id id = value.getId();if (id == null) {&nbsp; &nbsp; // TODO Handle the case ...}// They are now safe to use笔记但是,如果您无法真正处理这种情况,而只会因异常而崩溃,那么处理它并没有真正的好处。请注意,这this在您的代码中已过时,因为您在字段和局部变量之间没有名称冲突。
随时随地看视频慕课网APP

相关分类

Java
我要回答