首页 > 解决方案 > 需要一些关于 requireNonNull 的说明

问题描述

getActivity().finish();

现在编辑器会在方法被注释的地方显示警告。然后它显示使用建议。当我接受它的更改时,它将代码转换为此,并且警告消失了。@NullablerequireNonNull

Objects.requireNonNull(getActivity()).finish();

使用有意义requireNonNull吗?

的实现requireNonNull

public static <T> T requireNonNull(T obj) {
    if (obj == null)
        throw new NullPointerException();
    return obj;
}

getActivity()所以如果为空,我的代码仍然会崩溃。

我们应该对此进行空检查。

if (getActivity() != null)
     getActivity().finish();

我认为null checkrequireNonNull,你说什么?如果是,那么编辑不应该建议在requireNonNull那里使用。

因为在状态类似的字段中使用 requireNonNull 是不安全的Activity。我错过了一些好处requireNonNull吗?

标签: javaandroid

解决方案


此处的显式null检查是正确的,因为您希望防止在getActivity返回时抛出 NullPointerException null

Objects.requireNonNull()通常用于参数验证(快速失败),例如可以在构造函数中使用:

/** 
 * Constructs a new Foo instance. 
 *
 * @param bar a bar, not null  
 */
public Foo(Bar bar) {
    this.bar = Objects.requireNonNull(bar);
}

Objects.requireNonNull如果对象结果是null. 我想IDE在这里建议不是理想的解决方案。


推荐阅读