[英]Best way to check if a reference is null in Java
我想知道什么是最好的方法来检查我们是否在Java中有一个有效的引用。 我知道此语法有效,但令人难以置信。
if (myObj == null) {
// Do something knowing we have an object
}
我来自其他一些语言,这些语言使您可以像检查c ++一样检查指针。
char* prt = null;
if (ptr) {
// We know we have a valid c-string
}
Java中是否有任何模棱两可或类似的语法? 使用编译器扩展或预处理程序我可以。
继续跟进。 在开始讨论之前,我开始谈论为什么我应该只使用Java语法,因为您可能会忘记=
符号,请不要这么做。
if (myObj = null)
将被编译器/ lint捕获。
nullptr_t
Java没有将nullptr_t
的类似物或指针类型的隐式转换为bool
,因此您必须使用有点冗长的表示法
if (myObj == null)
而在C ++中,我们可以编写
if (myObj)
在这方面,Java不太简洁,而且可以说更清晰。
没有捷径语法可用于处理Java中的null
检查,甚至没有其他语言中可用的空合并或空传播运算符。 也没有用户定义的转换运算符,因此您将无法使用C ++惯用语,该惯用语使您无法在返回对象的表达式上编写循环,例如while (cin >> x) { ... }
。
但是,Java 8中存在一个强大的替代方法,可以完全避免null
检查:将可空对象包装在Optional<T>
,并使用其方法隐藏空检查。
这是一个简短的示例:
String s = "Hello";
Optional<String> os = Optional.ofNullable(s);
os.ifPresent(x -> { System.out.println(x); });
上面打印 "Hello"
。 如果将s
设置为null
,则代码将不打印任何内容。
if(x == null) {
doSomething();
}
...是Java中的通用习语。 Java的设计者决定不允许将非布尔型变量视为隐式“真实”值。
另一个常见的习惯用法是在三元语句中使用x == null
:
return x == null ? "not found" : x;
或使用标准方法在null早期引发异常:
Objects.requireNonNull(x);
更一般而言,尝试采用一种编程样式,在这种编程样式中您永远不会期望传递null,因此不必为这种可能性编写代码。
在非公共API上,由于您永远不会传递null,因此您无需测试null(如果发生NullPointerException
,则传递null的人都可以自己负责混乱)。
在公共API中,在传递非null时验证调用者是否有礼貌,但这在每种情况下都不是必不可少的。
一个合理的目标是始终期望输入为非null,并且永远不要返回null(因为Java 8,如有必要,请使用Optional
,或者采用Null Object Pattern )。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.