在Compiller中是否实施了Kotlin null安全措施?

gav*_*koa 1 null kotlin

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

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

我可以从Java代码中检查Kotlin null契约(对于方法参数和返回值)吗?

Ser*_*hyk 6

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

@Nullable
Integer myFunction(@NotNull MyClass first_value, @Nullable String second_value)
Run Code Online (Sandbox Code Playgroud)

这就是你如何从Java代码中找到Kotlin null契约的方式,据我所知,Kotlin没有用一些额外的标志来包装对象,因为它会使Kotlin-Java互操作性变得复杂.