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

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中可选的目的是什么?

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

 类似资料: