是否有计划将类型检查为null的类型添加到Java中



相对于Java,我最喜欢Kotlin的一点是,您可以使用编译器来保证某些值永远不会为null。(Swift也有这个功能。(

var foo: Thing 
var bar: Thing?

就是这个例子,foo永远不能为空。我不必用防御性的空检查来污染我的代码。另一方面,bar可能为空。还有一种方便的语法用于检查某个东西是否为null并使用它

bar?.x             // bar.x, or null if bar is null
bar ?: defaultBar  // bar, or defaultBar if bar is null
if (bar != null) { 
// bar is now Thing here, not Thing? (Assuming bar is a parameter or local variable.)
}

Java最近发展得更快,并添加了一些功能,但我还没有听说过这方面的任何消息。它被考虑过并被拒绝了吗?或者有一天它会被添加到Java中?

不,Oracle没有这样的计划。

Oracle认为您可以使用第三方工具来做到这一点,例如Checker Framework、NullAway,或者内置在IDE中的支持,例如IntelliJ或Eclipse。

Oracle甚至不支持创建所有第三方工具都会使用的标准@NonNull注释。Oracle让JSR305过期,它本来可以定义标准注释,但没有恢复

Objects类中有3个静态方法用于要求对象不为null并在为null时抛出异常:

requireNonNull(T obj)
requireNonNull(T obj, String message)
requireNonNull(T obj, Supplier<String> messageSupplier)

正如@mernst所指出的,您可以使用Checker框架。它在编译时检查所有内容,您甚至可以添加自己的检查器。

相关内容

  • 没有找到相关文章

最新更新