java - 检查对象是否为空的更短方法?

标签 java

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

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

比如 JS 风格:

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

最佳答案

没有。

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,而不是空,或者可转换为值为零的数字,或其他内容。

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

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

别担心,学会喜欢语法。

关于java - 检查对象是否为空的更短方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53216132/

相关文章:

java - 为什么方法名以0结尾?

java - SimpleDateFormat 无法解析超过 4 位的毫秒数

java - Jpa 合并抛出 StaleObjectStateException?

java - 如何使线程/作业等待,直到上一个作业完成,然后在某个通知上恢复它

java - 为什么类的私有(private)成员可以在compareTo中访问?

java - java从哪里提取默认编码?

java - 帮助我决定使用 Google App Engine 来完成这项实际工作

java - Axis :没有引擎配置文件 - 中止

java - 转换为泛型类型时的类型安全警告

java - 单选按钮选择问题