检查Java中引用是否为null的最佳方法
我想知道检查java中是否有有效引用的最佳方法是什么。我知道这种语法是有效的,但它是满嘴的检查Java中引用是否为null的最佳方法,java,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中是否有任何模棱两可或类似的语法?我可以使用编译器扩展或预处理器 之前跟进
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)
将被编译器/linter捕获。唉,Java没有类似于
nullptr\t
的隐式转换或指向bool
的指针类型,因此您必须使用更冗长的表示法
if(myObj==null)
在C++中,我们可以写< /P>
if(myObj)
在这方面,Java没有那么简洁,而且可以说更清晰。唉,Java没有类似于
nullptr\t
的隐式转换,也没有指向bool
的指针类型,因此您必须使用更冗长的表示法
if(myObj==null)
在C++中,我们可以写< /P>
if(myObj)
在这方面,Java没有那么简洁,而且可以说更清晰。在Java中没有处理
null
检查的快捷语法,甚至在其他语言中也没有可用的null合并或null传播操作符。也没有用户定义的转换运算符,所以你不能使用C++习语来让你在返回对象的表达式上写循环,例如<代码>(CIN > x){}} /COD> < /P>
但是,Java8中存在一个强大的替代方法来避免所有的null
检查:将可为null的对象包装进来,并使用其方法隐藏null检查
下面是一个简短的例子:
String s = "Hello";
Optional<String> os = Optional.ofNullable(s);
os.ifPresent(x -> { System.out.println(x); });
String s=“你好”;
可选操作系统=可选的可用操作系统;
os.ifPresent(x->{System.out.println(x);});
上面的“你好”
。如果将s
设置为null
,代码将不打印任何内容
Java中没有处理
null
检查的快捷语法,甚至在其他语言中也没有可用的null合并或null传播运算符。也没有用户定义的转换运算符,所以你不能使用C++习语来让你在返回对象的表达式上写循环,例如<代码>(CIN > x){}} /COD> < /P>
但是,Java8中存在一个强大的替代方法来避免所有的null
检查:将可为null的对象包装进来,并使用其方法隐藏null检查
下面是一个简短的例子:
String s = "Hello";
Optional<String> os = Optional.ofNullable(s);
os.ifPresent(x -> { System.out.println(x); });
String s=“你好”;
可选操作系统=可选的可用操作系统;
os.ifPresent(x->{System.out.println(x);});
上面的“你好”
。如果将s
设置为null
,代码将不打印任何内容
。。。是Java中的通用习惯用法。Java的设计者决定不允许将非布尔变量视为隐式的“truthy”值
另一个常见的习惯用法是在三元语句中使用x==null
:
return x == null ? "not found" : x;
或者使用标准方法在null上尽早引发异常:
Objects.requireNonNull(x);
更一般地说,尝试采用一种编程风格,在这种风格中,您永远不会期望传递null,因此不必为这种可能性编写代码 在非公共API上,由于从不传递null,因此不需要测试null(如果发生
NullPointerException
异常,传递null的人可以自行负责)
在公共API中,对调用方来说,在传递非空值时验证非空值可能是一种礼貌,但这并不是在所有情况下都必需的
一个合理的目标是始终期望输入为非null,并且永远不返回null(因为Java 8,如果需要,使用可选的,或者采用默认值)
。。。是Java中的通用习惯用法。Java的设计者决定不允许将非布尔变量视为隐式的“truthy”值
另一个常见的习惯用法是在三元语句中使用x==null
:
return x == null ? "not found" : x;
或者使用标准方法在null上尽早引发异常:
Objects.requireNonNull(x);
更一般地说,尝试采用一种编程风格,在这种风格中,您永远不会期望传递null,因此不必为这种可能性编写代码
在非公共API上,由于从不传递null,因此不需要测试null(如果发生NullPointerException
异常,传递null的人可以自行负责)
在公共API中,对调用方来说,在传递非空值时验证非空值可能是一种礼貌,但这并不是在所有情况下都必需的
一个合理的目标是始终期望输入为非null,并且永远不返回null(因为Java 8,如果需要,请使用可选的,或者采用)。此外,还有相当多的值在其他语言中被视为“无效”。例如0
或false
或”
。在Java中,您必须自己准确地定义什么是有效的。null
是惯用的,便于阅读。C使用0x0
的事实是IMO的实现细节。这将帮助您:@BastimyObject.equals(null)
永远不能返回true
——它将NPE。@slim“永远不能”->“永远不应该”。严重覆盖的equals
方法可能允许null
。例如,我看到一个JSON库(不记得是哪一个),它说JSON值“null”
等于null
。。。不幸的是,还有相当多的值在其他语言中被视为“无效”。例如0
或false
或”
。在Java中,您必须自己准确地定义什么是有效的。null
是惯用的