为了账号安全,请及时绑定邮箱和手机立即绑定

如何正确处理NPE

如何正确处理NPE

慕后森 2023-06-08 20:16:57
我想正确处理 NPE 警告。例子:@NullableLiveData<User> currentUser;LiveData<List<Medication>> getUserMeds() {    return parent.getMedsForUser(this.currentUser.getValue().getId());}为方法显示两个 NPE 警告getValue()getId()我目前正在通过检查非空值来确保我不会在函数外部弄乱,但我会觉得在函数内部实现它会更好。
查看完整描述

2 回答

?
一只斗牛犬

TA贡献1784条经验 获得超2个赞

在函数内部返回值之前执行检查:

LiveData<List<Medication>> getUserMeds() {
    if (this.currentUser == null) return "Some default value or throw an Exception"
    return parent.getMedsForUser(this.currentUser.getValue().getId());
}


查看完整回答
反对 回复 2023-06-08
?
拉风的咖菲猫

TA贡献1995条经验 获得超2个赞

这完全取决于您要创建哪种逻辑。

解释

您收到此警告的原因是,如果其中一个返回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在您的代码中已过时,因为您在字段和局部变量之间没有名称冲突。


查看完整回答
反对 回复 2023-06-08
  • 2 回答
  • 0 关注
  • 112 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信