java - 如何编写 NullPointerException 安全方法和表达式?

标签 java exception nullpointerexception

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/

相关文章:

java - 抛出 NullPointerException,但对象已创建并正确返回值

java - 带有 MenuInflater 的菜单 XML

java - 如何点击工具栏中的导航按钮?

Java : Is it possible to deserialize objects without reflection

java - 尝试从列表中删除元素时,为什么会收到 UnsupportedOperationException?

java - 无法访问 onItemClick 方法中的 Activity 项目

java - 什么是NullPointerException,我该如何解决?

java - JWT 跳过登录页面的 URL

Java - 为什么 java.lang.RuntimeException 或其子类不强制我们在 try/catch 中编写代码

c# - InvalidDataContractException 是无效的集合类型,因为它具有 DataContractAttribute