Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否有计划将类型检查的可空类型添加到Java?_Java_Null_Non Nullable - Fatal编程技术网

是否有计划将类型检查的可空类型添加到Java?

是否有计划将类型检查的可空类型添加到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

关于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 (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平台组首席架构师的讨论。)