是否有计划将类型检查的可空类型添加到Java?
关于Kotlin,相对于Java,我最喜欢的一点是,您可以使用编译器来保证某些值永远不会为null。(Swift也有此功能。) 例如,是否有计划将类型检查的可空类型添加到Java?,java,null,non-nullable,Java,Null,Non Nullable,关于Kotlin,相对于Java,我最喜欢的一点是,您可以使用编译器来保证某些值永远不会为null。(Swift也有此功能。) 例如,foo永远不能为空。我不必用大量的防御性空检查来污染我的代码。另一方面,bar可以为空。还有一种方便的语法用于检查某个内容是否为null并使用它 bar?.x // bar.x, or null if bar is null bar ?: defaultBar // bar, or defaultBar if bar is null if
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中吗?在对象
类中,有一种方法要求对象不为null,并在以下情况下引发异常:
requireNonNull(T obj)
requireNonNull(T obj, String message)
requireNonNull(T obj, Supplier<String> messageSupplier)
requirennull(T obj)
requirennull(对象,字符串消息)
requirennoull(T obj,供应商消息Supplier)
类中有对象
用于要求对象不为null,并在以下情况下引发异常:
requireNonNull(T obj)
requireNonNull(T obj, String message)
requireNonNull(T obj, Supplier<String> messageSupplier)
requirennull(T obj)
requirennull(对象,字符串消息)
requirennoull(T obj,供应商消息Supplier)
不,Oracle没有这样的计划
Oracle认为您可以使用第三方工具(如)或内置在IDE中的支持(如IntelliJ或Eclipse)来实现这一点
Oracle甚至不支持创建所有第三方工具都会使用的标准
@NonNull
注释。Oracle let将定义标准注释,但它将过期,并且没有恢复。不,Oracle没有这样的计划
Oracle认为您可以使用第三方工具(如)或内置在IDE中的支持(如IntelliJ或Eclipse)来实现这一点
Oracle甚至不支持创建所有第三方工具都会使用的标准
@NonNull
注释。OracleLet将定义标准注释,但它将过期而没有恢复。正如@mernst所指出的,您可以使用。它在编译时检查所有内容,您甚至可以添加自己的检查程序。正如@mernst所指出的,您可以使用。它在编译时检查所有内容,您甚至可以添加自己的检查程序。这里没有kotlin专家。但是我认为你可以用java中的Optionals做同样的事情Optional.of()
和Optional.ofNullable()
。Optional没有那么好,因为类型检查器没有证明它的使用是正确的。(而且更详细)这里没有kotlin专家。但是我认为你可以用java中的Optionals做同样的事情Optional.of()
和Optional.ofNullable()
。Optional没有那么好,因为类型检查器没有证明它的使用是正确的。(而且更详细)在运行时检查null,但我要说的是编译时。就像在Java中声明变量是String
一样,您不必在运行时检查它是否是整数。类似地,在具有此类型checked null/not null功能的语言中(如Kotlin、Swift和其他),如果您将其声明为String
,而不是String?
,则您知道它从不为null,并且不必在运行时检查它。这会在运行时检查null,但我所说的是编译时。就像在Java中声明变量是String
一样,您不必在运行时检查它是否是整数。类似地,在具有此类型checked null/not null功能的语言(如Kotlin、Swift和其他语言)中,如果您将其声明为String
,而不是String?
,则您知道它从不为null,并且不必在运行时检查它。这太糟糕了。我不知道有谁使用和理解这个功能,认为这不是一个很大的改进。但是,我承认我没有使用这些附加框架。也许他们可以得到很多好处。我会检查一下。@RobN Oracle的态度是,有好的第三方工具存在,这就足够了。此外,Oracle希望第三方工具在市场上与之抗衡,而不是Oracle必须自己评估哪种工具最适合Java程序员。(来源:与Oracle Java平台组首席架构师的讨论。)这太糟糕了。我不知道有谁使用和理解这个功能,认为这不是一个很大的改进。但是,我承认我没有使用这些附加框架。也许他们可以得到很多好处。我会检查一下。@RobN Oracle的态度是,有好的第三方工具存在,这就足够了。此外,Oracle希望第三方工具在市场上与之抗衡,而不是Oracle必须自己评估哪种工具最适合Java程序员。(来源:与Oracle Java平台组首席架构师的讨论。)