Null-safe方法调用Java7

时间:2013-08-09 17:54:50

标签: java java-7

我希望获得有关Java7此功能的详细信息,例如此代码

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();
}

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

4 个答案:

答案 0 :(得分:13)

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

查看所有建议的功能,以及最终在此处选择的内容 - 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;
}

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

答案 1 :(得分:1)

如果我正确理解你的问题而你想缩短代码,你可以通过写下来利用短路运算符:

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

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

答案 2 :(得分:0)

它应该适合你:

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

同时检查此主题:Avoiding != null statements

答案 3 :(得分:0)

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

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