Java 8 可选。of(null)将抛出NPE,我需要在调用方法之前验证null吗?
Java8引入了可选的方法来处理NPE。在实际应用中,我不能理解一个问题 我有方法AJava 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
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
}