【问题标题】:shorter way to check if an object is null?检查对象是否为空的更短方法?
【发布时间】:2018-11-10 04:37:21
【问题描述】:

有没有更短的方法来检查一个字符串/对象是否为空?

    String str = someMethodThatReturnsStringOrNull(someOthreObject);
    if(str == null) { System.out.println("Empty"); }

比如喜欢JS风格的:

    if(str) { System.out.println("Empty"); }

【问题讨论】:

标签: java


【解决方案1】:

没有。

Java 要求条件语句的表达式必须是 boolean 类型,或者可以自动转换为 boolean 的类型;唯一可以这样转换的类型是Boolean,通过拆箱。

除非你定义一个没有意义的短名称的方法,否则你不能用更少的字符来做到这一点:

if (n(str)) {   // "n()" requires 3 characters
if (str == null) {  // " == null" requires 8 characters
                    // (remove the whitespace if you want to do it in 6...)

但是这 5 个额外的字符节省了大量的认知负担,即想知道“n 到底是什么?!”,更不用说定义和/或导入该方法的额外字符了。另一方面,任何编写过任何 Java(或者可能是其他语言)的人都会立即理解== null

str == null 准确地传达了您要测试的内容:引用为空,而不是空,或可转换为值为零的数字,或其他内容。

== null 还具有有益的编译时属性,例如它会阻止您使用原始操作数,例如 int i = 0; if (i == null) {} 是编译时错误,因为 i 是原始的,因此不能是 @987654331 @,而if (n(i)) {} 是允许的(前提是形参类型是Object,您希望它是这样,以便最大限度地重用),因为i 将被装箱。

Java 是一种相当冗长的语言;有很多事情比这更冗长。就个人而言,我什至不会注意到写== null,这是我肌肉记忆的条件。

别再担心了,学会爱上它的语法。

【讨论】:

  • 在 Java 中复制 if(str) 的 JS 版本不仅仅是空检查。 falseundefinedNaN0"""false" 在 JavaScript 中也都返回 false。
  • @Compass 这正是我在“精确传达”段落中提出的观点。 == null 表示 1 个确切的东西。
  • 我同意这个说法,我只是不知道如何描述这个问题,因为提供的 JavaScript “等效”的 not-null 实际上不是非空检查,并且有一个明确的版本。事实上,JS 的显式版本的 null-check 实际上比 Java 的要长:if(str === null)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-13
相关资源
最近更新 更多