Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.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
Kotlin null安全是否在编译器中实现?_Kotlin_Null - Fatal编程技术网

Kotlin null安全是否在编译器中实现?

Kotlin null安全是否在编译器中实现?,kotlin,null,Kotlin,Null,我想知道Kotlin是否需要包装对象或携带一些标志来支持空安全性 此信息仅在编译期间可用(关于空安全性),还是泄漏到.class文件或字节码 我是否可以从Java代码中检查Kotlin null contract(方法参数和返回值)?Kotlin编译器非常努力地防止NullPointerException,并强制您适当地处理可能的问题。但即使使用这些非常复杂的方法来避免NPE,也有一些情况是可能的。最好的例子是当我们想在Kotlin中使用一些java方法时。编译器无法确定来自Java的类型(也称

我想知道Kotlin是否需要包装对象或携带一些标志来支持空安全性

此信息仅在编译期间可用(关于空安全性),还是泄漏到
.class
文件或字节码


我是否可以从Java代码中检查Kotlin null contract(方法参数和返回值)?

Kotlin编译器非常努力地防止NullPointerException,并强制您适当地处理可能的问题。但即使使用这些非常复杂的方法来避免NPE,也有一些情况是可能的。最好的例子是当我们想在Kotlin中使用一些java方法时。编译器无法确定来自Java的类型(也称为平台类型)是否可以为null。当一个平台类型的值被分配给一个变量时,编译器允许它,但它可能会在以后导致NullPointerException。这就是Kotlin严重依赖可空性注释(
@Nullable
@NotNull
)的原因。如果这些属性是在我们想要调用的Java代码中定义的,那么编译器可以确保不会发生NPE。当Kotlin编译器生成字节码时,它还提供可空性注释:

@Nullable
Integer myFunction(@NotNull MyClass first_value, @Nullable String second_value)

这就是如何从Java代码中找到Kotlin null契约的方法,据我所知,Kotlin不会使用一些附加标志来包装对象,因为这会使Kotlin Java互操作性变得复杂。

Kotlin编译器非常努力地防止NullPointerException,并迫使您处理可能的问题适当地。但即使使用这些非常复杂的方法来避免NPE,也有一些情况是可能的。最好的例子是当我们想在Kotlin中使用一些java方法时。编译器无法确定来自Java的类型(也称为平台类型)是否可以为null。当一个平台类型的值被分配给一个变量时,编译器允许它,但它可能会在以后导致NullPointerException。这就是Kotlin严重依赖可空性注释(
@Nullable
@NotNull
)的原因。如果这些属性是在我们想要调用的Java代码中定义的,那么编译器可以确保不会发生NPE。当Kotlin编译器生成字节码时,它还提供可空性注释:

@Nullable
Integer myFunction(@NotNull MyClass first_value, @Nullable String second_value)
这就是如何从Java代码中找到Kotlin null契约的方法,据我所知,Kotlin没有使用附加标志包装对象,因为这会使Kotlin Java互操作性变得复杂

我想知道Kotlin是否需要包装对象或携带一些标志来支持空安全性

与类型安全性一样,空安全性也适用于编译时。Kotlin不仅不需要包装对象,而且这个特性的本质是在编译时证明不需要运行时检查

此信息仅在编译期间可用(关于空安全性),还是泄漏到
.class
文件或字节码

可空性信息在编译期间可用,正是因为它存在于
.class
文件中。Kotlin只编译您自己的代码,它不会编译整个标准库和所有依赖项

我可以从Java代码中检查KotlinNullContract(方法参数和返回值)吗

您可以通过反射(通过查找可空性注释)来实现。然而,如上所述,这样做毫无意义

我想知道Kotlin是否需要包装对象或携带一些标志来支持空安全性

与类型安全性一样,空安全性也适用于编译时。Kotlin不仅不需要包装对象,而且这个特性的本质是在编译时证明不需要运行时检查

此信息仅在编译期间可用(关于空安全性),还是泄漏到
.class
文件或字节码

可空性信息在编译期间可用,正是因为它存在于
.class
文件中。Kotlin只编译您自己的代码,它不会编译整个标准库和所有依赖项

我可以从Java代码中检查KotlinNullContract(方法参数和返回值)吗


您可以通过反射(通过查找可空性注释)来实现。但是,如上所述,这样做是毫无意义的。

您认为
@Nullable
@NotNull
实际上属于哪个包?有几个候选:这些注释属于
org.jetbrains.annotations
包。
@Nullable
@NotNull
实际上属于哪个包?有几个候选项:这些注释属于
org.jetbrains.annotations
包。请参阅我对问题的评论。除非您明确告诉编译器,否则Kotlin编译器会添加运行时检查。我知道在不可为null的类型中仍然存在一些使
null
为null的纠结和方法,但从概念上讲,null安全性是指消除对这些检查的需要。许多来自Java的开发人员似乎忽视了这一点,他们一直认为这是关于自动运行时检查的,这是真的。如果你有100%的Kotlin,就不可能有NPE。如果你有混音,那就很难了。正如您所说,虽然编译器通过注入运行时检查来确保其安全性,但大多数情况下,这些检查是不必要的。除非您明确告诉编译器,否则Kotlin编译器会添加运行时检查。我知道在不可为null的类型中仍然存在一些使
null
为null的纠结和方法,但从概念上讲,null安全性是指消除对这些检查的需要。许多来自Java的开发人员似乎忽视了这一点,他们一直认为这是关于自动运行时检查的,这是真的。如果你有100%的Kotli