问题标签 [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.

0 投票
3 回答
1224 浏览

java - Kotlin 项目中使用的遗留 Java 库中的空值安全性

假设我在旧/旧 Java 库中有特定代码:

前两个参数使用 @NotNull 和 @Nullable 注释正确注释(使用 jetbrains.annotations)。第三个(unnanotatedString)没有适当的注释。

当我在 Kotlin 代码中使用此类并将所有构造函数参数设置为非空值时,一切都很好:

第一个值是非空的,所以我可以在没有安全调用的情况下访问它。第二个值,我需要使用安全调用(nullableString?.length),如果没有,我有一个编译时错误,到目前为止还不错。在第三个值(unannotatedString)上,我可以在没有安全调用的情况下使用它,它编译得很好。

但是当我将第三个参数设置为“null”时,我没有收到编译时错误(不需要安全调用,只有运行时 NullPointerException:

这是预期的行为吗?Kotlin 的编译器是否将未注释的 Java 方法与使用 @NotNull 注释的方法相同?

0 投票
1 回答
2280 浏览

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?

0 投票
3 回答
321 浏览

kotlin - 可以将字段转换为自身的非空版本吗?

我有一个数据类

我想确保我的数据只有在它不为空时才能访问,否则抛出。我用下面的很好。

但是,如果我按照Override getter for Kotlin data class遵循指南,我需要返回以下投诉MyData?而不是MyData

field返回时不能强制转换为它的非空版本是真的吗?

0 投票
2 回答
398 浏览

java - 如何在 Kotlin 中定义可为空的委托成员?

我需要用 Java 装饰一个实例,并希望代表团在 Kotlin 中(更容易)。

问题是我在定义上遇到编译错误。

我如何定义inner能够接收空值?

Java的示例用法:

* 这是一个简化的示例,尝试在 Java 中使用 Kotlin 的委托,其中传递的内容可以为 null。

0 投票
1 回答
1008 浏览

kotlin - 对 Kotlin 中的 Null 安全感到困惑

我是 Kotlin 的新手,并且已经阅读过不止一次关于Kotlin 中的Null Safety的内容,但我真的很困惑,也不清楚。谁能帮我回答以下问题:

  1. !中的字符是什么fun getString(key: String!)意思?

  2. 以下操作员的名称是否正确:

?.: 安全电话接线员

?:: 猫王算子

!!: 肯定的运营商

  1. ?:operator 和 和有什么区别?.let?我应该什么时候使用每一个?
0 投票
3 回答
1575 浏览

kotlin - 为什么不安全的 .run() 调用在 Kotlin 中的空值上工作正常?

我有以下代码片段:

我这里有一个可以为空的变量foo,它实际上设置为null后跟一个非安全.run()调用。

当我运行代码片段时,foo尽管该run方法是在null. 这是为什么?为什么没有NullPointerException?为什么编译器允许对可选值进行非安全调用?

如果我通过println(foo)了,我会在控制台中得到一个很好的多汁null,所以我认为可以安全地假设它foo实际上是null.

0 投票
3 回答
2685 浏览

kotlin - 在 kotlin 中处理可以返回 null 的对象

我有我正在为我的项目转换为 Kotlin 的 java 代码。

我已将其转换为 koklin,如下所示:

我只是想知道在我的 kotlin 版本中用户是否恰好为空。我是否需要有一个 if 条件来检查用户是否为空?

我可以将功能作为一条线

调用函数是否需要处理可以从函数返回的空字符串?

非常感谢您的任何建议

0 投票
2 回答
4924 浏览

gson - Kotlin不可为空的值可以为空吗?

我有后端返回我一些 json。

我把它解析给我的班级:

使用 gson 转换器工厂:

在我的界面中:

然后我从服务器(使用 rxJava)检索数据,没有任何错误。但我预计会出现错误,因为我认为我应该做这样的事情(以防止 GSON 转换器错误,因为notNullableValue我的 JSON 响应中不存在):

从后端接收数据并解析到我的 SomeData 类后,构造函数没有 def 值,notNullableValue == null的值。

据我了解,不可为空的值在 Kotlin 中可以为空吗?

0 投票
8 回答
32375 浏览

kotlin - 如果可空类型为空,我如何运行代码块?

在 Kotlin 中,如果对象不为 null,我可以运行代码,如下所示:

但是,如果对象为空,我该如何执行代码块呢?

0 投票
2 回答
507 浏览

kotlin - 当参数不可为空时,未针对具体类型插入空检查

TL;DR具有具体类型的函数在生成代码时是否应该考虑类型参数的可空性?

测试用例

考虑以下 Kotlin 代码;这两种方法之间的唯一区别是类型绑定是否可以为空 ( Any?) 或不可为 ( Any)。

whereunsafeMethod通过在 Java 中定义来颠覆类型系统:

这是 Kotlin 1.1.4。

预期行为

我希望这些行为等效-类型已被具体化,因此T已知的实际值不可为空,因此应该在return语句之前在函数内部应用空检查。

观察到的行为

这两种情况以不同的方式失败:

  • testNonNullableBound行为符合预期(由于对返回的值进行空检查而失败unsafeMethod())。
  • testNullableBound未按预期运行 - 分配给x.

所以看起来空检查的插入是基于类型绑定的,而不是实际类型。

分析

供参考,相关字节码如下。注意添加的空检查testNonNullableBound

testNonNullableBound

testNullableBound