Java 8 可选。of(null)将抛出NPE,我需要在调用方法之前验证null吗?

Java 8 可选。of(null)将抛出NPE,我需要在调用方法之前验证null吗?,java-8,optional,Java 8,Optional,Java8引入了可选的方法来处理NPE。在实际应用中,我不能理解一个问题 我有方法A public void doSomethingA(String para) { Optional<String> name = Optional.of(para); if (name.isPresent()) { //do } } 如果我检查para不为null,A和B之间的区别是什么 其中是可选的含义。如果不确定是否有值,但不希望抛出NullPointer

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

我有方法A

public void doSomethingA(String para) {
    Optional<String> name = Optional.of(para);
    if (name.isPresent()) {
        //do
    }
}
如果我检查para不为null,A和B之间的区别是什么

其中是可选的含义。

如果不确定是否有值,但不希望抛出
NullPointerException
,请使用

如果您知道您有一个非null值,或者如果抛出
NullPointerException
则可以使用

关于剩下的问题:为什么
null
Optional
您可能会发现以下问题很有用:


您的问题可能还与:

可选并不能阻止抛出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
    
        }
public void doSomethingA(字符串段落){
可选optName=可选的可空值(第段);
字符串名称=optName.orElse(“未知”);
//在他的观点上,你完全可以肯定这个名字甚至被命名或“未知”
//并且可以做任何你想做的事情,而不用担心扔NPE
}
您可以使用其他可选方法,如:
optName.orelsetrow()
若参数为null,则抛出并出错,
optName.orelsetget(()->{return“Unknown”;})实际上与示例相同,但您可以添加更多逻辑以获得默认值或许多其他方法。

使用instead如果抛出NullPointerException没有问题,是否需要使用它?这取决于您的用例。大多数时候,我处理的是我无法控制的值(它们来自于遗留系统等),然后我使用
of nullable
。如果我可以控制这些值,我更喜欢
,因为我想看到
NullPointerException
如果有人试图传递一个
null
-值,而我肯定不会期望任何值。
     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
    
        }