Neu*_*nte 4 java null function
问这个问题我觉得很傻,但我已经在两个独立的公司代码库上看到了这段代码,我开始认为有一些我不知道的古老 Java 知识。
所以,我们得到了这样的代码:
/* Lot of corporate stuff */
if (ClassicUtilsClass.isNotNull(variable)) {
/* Variable handling shenanigans. */
}
Run Code Online (Sandbox Code Playgroud)
转到我们的 ClassicUtilsClass 揭示了该函数的实现:
/* Lot of useful static functions*/
public static isNotNull(Object o) {
return o!=null;
}
public static isNull(Object o) {
return o==null;
}
Run Code Online (Sandbox Code Playgroud)
我读了它,挠挠头,环顾互联网,询问同事和朋友,然后嘲笑该功能的无用。然后我换了工作,一位同事向我展示了或多或少相同的代码。
在同一个代码库中,我们有经典的“isNullOrEmpty”,它执行标准的“return object==null || object.size() == 0;”,所以我可以理解有一个函数来包装空比较......加上别的东西,但我没有看到为空检查创建一个全新的函数的意义。
我在这里失去了什么?
Objects实用程序类中有类似的函数,称为nonNull和isNull。提供它们的原因是用作谓词,例如
...stream().filter(Objects::nonNull)...
Run Code Online (Sandbox Code Playgroud)
我看不到任何使用的理由
if (SomeClass.isNotNull(x))
Run Code Online (Sandbox Code Playgroud)
而不是更短、更清晰
if (x!=null)
Run Code Online (Sandbox Code Playgroud)
我能想到的将运算符实现为方法的原因只有几个。
第一个原因是“分析”该操作在应用程序中使用的次数。分析工具会计算方法所花费的时间以及调用方法的次数,但它们不会跟踪操作符的使用情况。
将运算符实现为函数的第二个原因是在函数式编程结构中使用它们。运算符不能使用反射传递,但方法可以,因此可以创建使用反射的函数操作(映射、归约等),在这些情况下,运算符需要实现为要使用的方法。
将 not null 运算符实现为方法的第三个可能的原因是简化其他一些编程语言到 java 的自动翻译。在 java 中,基本类型不能为 null,因此直接使用 == 运算符检查它们是否为 null 会导致编译器错误。Java 会将原语自动装箱为对象,以便它们可以用作接受 Object 作为参数类型的方法的参数。在这种情况下,代码转换器可以将空检查转换为方法调用,而无需跟踪变量类型。
| 归档时间: |
|
| 查看次数: |
10089 次 |
| 最近记录: |