NullPointerException
总是代码困惑。需要检查每个对象是否是 null 安全的并且不要抛出 NPE。
我遇到过一个情况:
public void aMethod(Employee emp){
String fullEmployeeDetailRow = "Name: "+emp.getName().getFirstName()
+"LastName :"+emp.getName().getFirstName()
+"Address:"
+emp.getAddress().getBillingAddress().getBuildingNumber().getApartmentNumber()
+" "
+emp.getAddress().getBillingAddress().getStreetName()
}
在上面的例子中,NPE 的可能性有很多。例如在
emp.getAddress().getBillingAddress().getBuildingNumber().getApartmentNumber()
表达式,调用
getAddress() or getBillingAddress() or getBuildingNumber()
any 可以是 null 和可能的 NPE 来源。所以我现在需要整理我的代码以检查每个代码是否可以为空。
我的问题/想法是:在 Java 中有没有一种方法可以创建一个方法,该方法接受一个表达式并评估它是否抛出 NullPointerException
,如果是,则返回一个默认值,比如一个空白 ""
?
所以在这种情况下我需要一个方法
expression=emp.getAddress().getBillingAddress().getBuildingNumber().getApartmentNumber()
String checkForNPE(expression){
try{
return expression;
}catch(NullPointerException e){
return " " // default Value
}
}
问题是当我尝试创建这样的方法并向其传递一个表达式时,Java 在调用该方法之前计算该表达式并且预先抛出 NPE!
如何将表达式传递给方法并让 Java 仅在方法内部对其求值?
最佳答案
您可以在这种情况下使用 Optional。
Option.ofNullable(emp)
.map(e -> e.getAddress())
.map(a -> a.getBillingAddress())
.map(a -> a.getBuildingNumber())
.map(n -> n.getApartmentNumber())
.orElse("not set")
关于java - 如何编写 NullPointerException 安全方法和表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36605961/