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 check
比requireNonNull
好,你怎么说?如果是,那么编辑器不应该建议在那里使用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在这里建议的不是理想的解决方案。