Null-safe方法调用Java7

我想获得有关此代码的Java7此function的详细信息

public String getPostcode(Person person) { if (person != null) { Address address = person.getAddress(); if (address != null) { return address.getPostcode(); } } return null; } 

可以做这样的事情

 public String getPostcode(Person person) { return person?.getAddress()?.getPostcode(); } 

但坦率地说,对我来说不太清楚。请解释一下?

作为Project Coin的一部分,Java 7提出了空安全方法调用,但它没有进入最终版本。

查看所有建议的function,以及最终在这里选择的内容 – https://wikis.oracle.com/display/ProjectCoin/2009ProposalsTOC


就简化该方法而言,您可以做一些改变:

 public String getPostcode(Person person) { if (person == null) return null; Address address = person.getAddress(); return address != null ? address.getPostcode() : null; } 

我认为你不能比这简洁明了。 恕我直言,试图将该代码合并为一行,只会使代码不那么清晰,可读性也会降低。

如果我正确理解您的问题并且您希望缩短代码,则可以通过编写以下内容来利用短路运算符:

 if (person != null && person.getAddress() != null) return person.getAddress().getPostCode(); 

如果第一个条件为假,则不会检查第二个条件,因为&&运算符在遇到第一个false时会使逻辑短路。

它应该适合你:

 public String getPostcode(Person person) { return person != null && person.getAddress() != null ? person.getAddress().getPostcode() : null; } 

还要检查此线程: 避免!= null语句

如果要避免两次调用getAddress,可以执行以下操作:

 Address address; if (person != null && (address = person.getAddress()) != null){ return address.getPostCode(); }