getActivity().finish();

现在,editor显示警告,其中方法被注释为@Nullable。然后给出了使用requireNonNull的建议。当我接受它的更改时,它会将代码转换成这个,警告就消失了。
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
因为在状态类似于Activity的字段中使用requirenonall是不安全的。我是否错过了requireNonNull的一些好处?

最佳答案

这里显式的null检查是正确的,因为您希望在getActivity返回null时防止抛出nullpointerexception。
Objects.requireNonNull()通常用于参数验证(Fail Fast),可用于构造函数中的示例:

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

Objects.requireNonNull将抛出一个nullpointerexception(这是一个runtimeexception),如果对象结果是null。我认为ide在这里建议的不是理想的解决方案。

07-26 09:38