Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 需要一些关于requireNonNull的澄清吗_Java_Android - Fatal编程技术网

Java 需要一些关于requireNonNull的澄清吗

Java 需要一些关于requireNonNull的澄清吗,java,android,Java,Android,现在编辑器显示警告,其中方法用@Nullable注释。然后显示使用requirennull的建议。当我接受它的更改时,它会将代码转换为此,警告消失 getActivity().finish(); 使用requirennoull有意义吗? requirennull的实现是 Objects.requireNonNull(getActivity()).finish(); 我认为空检查比requirennoull好,你说呢?如果是,则编辑器不应建议在此处使用requirennull 因为在具有类似于

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

getActivity().finish();
使用
requirennoull
有意义吗?

requirennull
的实现是

Objects.requireNonNull(getActivity()).finish();
我认为
空检查
requirennoull
好,你说呢?如果是,则编辑器不应建议在此处使用
requirennull


因为在具有类似于
活动的状态的字段中使用requirennoull是不安全的。我是否错过了
requirennoull
的一些好处?

这里的显式
null
检查是正确的,因为您希望防止在
getActivity
返回
null
时引发NullPointerException

Objects.requireNonNull()
通常用于参数验证(fail fast),例如在构造函数中使用:

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

Objects.requirennoull
将抛出一个NullPointerException(这是一个RuntimeException),如果该对象被证明为
null
。我认为IDE并不是这里的理想解决方案。

这是Java 8中引入的Java对象的显式空检查。Objects类也包含更多类似的静态方法。请参阅

但在Java8Lambda表达式中,这些更有用。当我们使用下面的示例这样的函数操作时,我们可以更方便地执行空检查,特别是使用requireNonNull方法,我们可以轻松地消除空值

/** 
 * Constructs a new Foo instance. 
 *
 * @param bar a bar, not null  
 */
public Foo(Bar bar) {
    this.bar = Objects.requireNonNull(bar);
}
如果您不知道lambda表达式,请阅读它。如果您不知道Lambda表达式,请不要担心

更新:

abc.stream().map(Objects::requireNonNull).forEach(obj -> {
     // Whatever action to be on obj element. 
});

上面的例子也和前一个相似。但它们也有各自的区别。根据要求,我们可以选择是否需要在过滤后立即使用
.forEach
功能操作

IDE并没有说您应该使用
requireNonNull
,它只是说方法调用可能会导致
NullPointerException
,然后您必须引入nullcheck。不!,它以黄色高亮显示建议。当您将鼠标悬停在该字段上时,您将看到警告,当您按alt+enter时,您将看到建议。您可以配置该类型的警告,但建议并不总是有效的,然而,您必须向它添加一些逻辑,以避免出现您认为答案没有帮助的ExceptionId?正如文档所述,
Objects::requirennoull
“主要用于进行参数验证,
Objects::nonNull
应该优先使用流过滤集合。如果在第一个示例中处理
null
值,将抛出RuntimeException,这显然不是所需的行为。是的。这种方法的目的可能不同。类似这样的场景,
objectobj=Objects.requirennull(abc,“abc为空”)会更好。这也会在初始化时发生。因此这将创建一个
运行时异常。好的,所以IDE并没有给出一个很好的空检查建议,它只是
fail fast
的一个实现。
ArrayList<Object> abc = new ArrayList<>();
abc.stream().map(Objects::requireNonNull).forEach(obj -> {
     // Whatever action to be on obj element. 
});
abc.stream().filter(Objects::nonNull).forEach(obj -> {
      // Whatever action to be on obj element. 
});