当前位置: 首页 > 知识库问答 >
问题:

Optional.of(null)将抛出NPE,我需要在调用方法之前验证null?

宰父跃
2023-03-14

Java8引入了可选的方法来处理NPE。在实际应用中,我不能理解一个问题。

我有方法A

public void doSomethingA(String para) {
    Optional<String> name = Optional.of(para);
    if (name.isPresent()) {
        //do
    }
}

但是如果para=null,它将抛出NPE。

方法B

public void doSomethingB(String para) {
    if (para != null) {
        //do
    }
}

如果我检查para不为null,A和B之间的区别是什么。

“可选”的含义在哪里。

共有2个答案

宫修贤
2023-03-14

可选并不能防止抛出一个NPE,这使得它很容易避免,但你必须做你的一部分,例如,我会重构你的代码到这样的东西。

     public void doSomethingA(String para) {
           
           Optional<String> optName = Optional.ofNullable(para);
        
           String name = optName.orElse("Unknown");
    //At his point, you are completely sure that name is even given name or "Unknown" 
    //and can do wherever you want without being afraid of throwing a NPE
    
        }

您可以使用其他可选方法,如:optName。OrelsThrow()若参数为null,则抛出并出错,optName。orElseGet(()-

徐柏
2023-03-14

如果您不确定是否有值,但您不希望抛出NullPointerExc0019,请使用Optional.ofNullable

使用可选。如果您知道自己有一个非空值,或者如果抛出了一个NullPointerException,您就可以了。

关于你剩下的问题:为什么null可选,你可能会发现下面的问题很有用:可选vs. null。Java8中可选的目的是什么?

您的问题可能还与:为什么使用可选选项有关。超过可选的。不可能吗?

 类似资料:
  • 默认情况下,MapStruct将NullValueMappingStrategy作为RETURN_NULL。我的要求是,当source为null时,我需要抛出一个NPE,类似于lombok的@nonnull的工作方式。

  • 问题内容: 我实际上何时需要调用此方法Runtime.getRuntime()。addShutdownHook()以及何时或为何需要关闭应用程序。任何人都可以通过举例说明一下。 谢谢 问题答案: 据我所知,我将在下面进行解释。您可以搜索它并找到很多信息。 将注册一些在程序终止时要执行的动作。您启动的程序以两种方式结束: 主线程(根)结束其运行上下文; 该程序遇到一些意外情况,因此无法继续进行。 如

  • 是否需要在之前调用?为什么?我看不出有什么不同,但我看到很多人这样做。

  • 我试图访问内部对象,而不会导致空指针异常。我希望避免手动编写if条件null检查,而是使用利用java 8特性。 我从findFirst方法中获得Nullpointer异常。我知道如果所选元素为null,findFirst会返回null指针异常,所以我在调用findFirst之前尝试使用过滤器(objects::nonNull)过滤出null对象,但它仍然会抛出null指针。 看起来我的过滤不起作

  • 我有一个扫描器,它由我的类中的调用。 循环的工作方式是,如果选择了“n”或“n”,它将再次调用构造函数。但是,由于这两种类型是字符串数据类型,构造函数首先调用一个名称,因此它要么将“n”或“n”识别为名称,要么跳过整个名称。我怎么解决这个? 下面的Player类 下面是以作为第一个名称输入的示例输出: 如您所见,问题出现在之后。