问题标签 [kotlin-null-safety]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - Kotlin 项目中使用的遗留 Java 库中的空值安全性
假设我在旧/旧 Java 库中有特定代码:
前两个参数使用 @NotNull 和 @Nullable 注释正确注释(使用 jetbrains.annotations)。第三个(unnanotatedString)没有适当的注释。
当我在 Kotlin 代码中使用此类并将所有构造函数参数设置为非空值时,一切都很好:
第一个值是非空的,所以我可以在没有安全调用的情况下访问它。第二个值,我需要使用安全调用(nullableString?.length),如果没有,我有一个编译时错误,到目前为止还不错。在第三个值(unannotatedString)上,我可以在没有安全调用的情况下使用它,它编译得很好。
但是当我将第三个参数设置为“null”时,我没有收到编译时错误(不需要安全调用,只有运行时 NullPointerException:
这是预期的行为吗?Kotlin 的编译器是否将未注释的 Java 方法与使用 @NotNull 注释的方法相同?
android - Kotlin non-null assertion on null
As Kotlin have the non-null assertion, I found some funny stuff...
It will crash.
But the point is, it doesn't check at compile time.
The app will crash at runtime.
Shouldn't it throw compile time error?
kotlin - 可以将字段转换为自身的非空版本吗?
我有一个数据类
我想确保我的数据只有在它不为空时才能访问,否则抛出。我用下面的很好。
但是,如果我按照Override getter for Kotlin data class遵循指南,我需要返回以下投诉MyData?
而不是MyData
field
返回时不能强制转换为它的非空版本是真的吗?
java - 如何在 Kotlin 中定义可为空的委托成员?
我需要用 Java 装饰一个实例,并希望代表团在 Kotlin 中(更容易)。
问题是我在定义上遇到编译错误。
我如何定义inner
能够接收空值?
Java的示例用法:
* 这是一个简化的示例,尝试在 Java 中使用 Kotlin 的委托,其中传递的内容可以为 null。
kotlin - 对 Kotlin 中的 Null 安全感到困惑
我是 Kotlin 的新手,并且已经阅读过不止一次关于Kotlin 中的Null Safety的内容,但我真的很困惑,也不清楚。谁能帮我回答以下问题:
!
中的字符是什么fun getString(key: String!)
意思?以下操作员的名称是否正确:
?.
: 安全电话接线员
?:
: 猫王算子
!!
: 肯定的运营商
?:
operator 和 和有什么区别?.let
?我应该什么时候使用每一个?
kotlin - 为什么不安全的 .run() 调用在 Kotlin 中的空值上工作正常?
我有以下代码片段:
我这里有一个可以为空的变量foo
,它实际上设置为null
后跟一个非安全.run()
调用。
当我运行代码片段时,foo
尽管该run
方法是在null
. 这是为什么?为什么没有NullPointerException
?为什么编译器允许对可选值进行非安全调用?
如果我通过println(foo)
了,我会在控制台中得到一个很好的多汁null
,所以我认为可以安全地假设它foo
实际上是null
.
kotlin - 在 kotlin 中处理可以返回 null 的对象
我有我正在为我的项目转换为 Kotlin 的 java 代码。
我已将其转换为 koklin,如下所示:
我只是想知道在我的 kotlin 版本中用户是否恰好为空。我是否需要有一个 if 条件来检查用户是否为空?
我可以将功能作为一条线
调用函数是否需要处理可以从函数返回的空字符串?
非常感谢您的任何建议
gson - Kotlin不可为空的值可以为空吗?
我有后端返回我一些 json。
我把它解析给我的班级:
使用 gson 转换器工厂:
在我的界面中:
然后我从服务器(使用 rxJava)检索数据,没有任何错误。但我预计会出现错误,因为我认为我应该做这样的事情(以防止 GSON 转换器错误,因为notNullableValue
我的 JSON 响应中不存在):
从后端接收数据并解析到我的 SomeData 类后,构造函数没有 def 值,notNullableValue == null的值。
据我了解,不可为空的值在 Kotlin 中可以为空吗?
kotlin - 如果可空类型为空,我如何运行代码块?
在 Kotlin 中,如果对象不为 null,我可以运行代码,如下所示:
但是,如果对象为空,我该如何执行代码块呢?
kotlin - 当参数不可为空时,未针对具体类型插入空检查
TL;DR具有具体类型的函数在生成代码时是否应该考虑类型参数的可空性?
测试用例
考虑以下 Kotlin 代码;这两种方法之间的唯一区别是类型绑定是否可以为空 ( Any?
) 或不可为 ( Any
)。
whereunsafeMethod
通过在 Java 中定义来颠覆类型系统:
这是 Kotlin 1.1.4。
预期行为
我希望这些行为等效-类型已被具体化,因此T
已知的实际值不可为空,因此应该在return
语句之前在函数内部应用空检查。
观察到的行为
这两种情况以不同的方式失败:
testNonNullableBound
行为符合预期(由于对返回的值进行空检查而失败unsafeMethod()
)。testNullableBound
未按预期运行 - 分配给x
.
所以看起来空检查的插入是基于类型绑定的,而不是实际类型。
分析
供参考,相关字节码如下。注意添加的空检查testNonNullableBound
。
testNonNullableBound
testNullableBound