Java在三元操作中声明变量。可能吗?

时间:2016-03-16 13:29:25

标签: java ternary-operator

假设我们有一些city方法String getZIP()。 我想打印ZIP的值,或者如果ZIP为空则不打印任何内容。

我可以使用三元操作在一行代码中完成:

System.out.print(city.getZIP() == null ? "" : city.getZIP())

问题是:我可以不同时拨打.getZIP()两次吗? 类似的东西:

System.out.print(String zip = city.getZIP() == null ? "" : zip) //syntax error here

3 个答案:

答案 0 :(得分:3)

在单独的行中定义变量:

String zip = city.getZIP();
System.out.print(zip == null ? "" : zip);

答案 1 :(得分:3)

您可以将值分配给现有变量,但不能在ternery条件中创建一个。

类似的东西,

String zip; // Created elsewhere but not assigned to city.getZip().
System.out.print(((zip = city.getZIP()) == null) ? "" : zip)

但你不能在里面声明一个新的变量。

答案 2 :(得分:2)

我有一个完全不同的解决方案:不要那样做

不要在您的类上放置返回 null 的方法作为" legal"结果

例如:邮政编码可以/应该是它自己的类。然后你只需声明一些ZIP的单例实例来表示"邮政编码是未定义的"。然后在" UnknownZip"上调用toString; ...例如,只给出一个空字符串。

使用null作为返回值总是为NullPointerExceptions打开机会。

所以 - 不要这样做。