问题标签 [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 投票
2 回答
851 浏览

android - Kotlin 中的非空值产生空指针异常

我有一个不可为空的值数组,如下所示:

它是这样填充的:

最多有 3 种不同的方法可以像这样填充它,具体取决于代码流。一旦数组被填充,它就会被处理:

所有这些都在 AsyncTask doInbackground 中完成。

调用 dog.bark() 时,我间歇性地收到以下异常:

致命异常:java.lang.RuntimeException 执行 doInBackground() 时发生错误

简而言之,非空对象的 ArrayList 有时会包含一个空对象。我试图弄清楚这是怎么发生的。如果将非空值添加到 ArrayList 中,我希望 Kotlin 会抱怨,当然我不确定这首先是如何发生的,因为我只在数组中放置了非空值。线程问题?欢迎任何想法:) 谢谢。

0 投票
0 回答
421 浏览

java - Java for Kotlin 中的包范围非空注释(由 Gradle 构建)

我正在尝试编写一个具有不可为空 API 的 Java 库,我希望 Kotlin 能够正确推断出这种不可为空性。根据Kotlin 的 Java interop reference ,我正在使用JSR-305注释及其@TypeQualifierDefault来实现整个包的效果。

我使用 Gradle 4.10.2 构建它,并按照说明-Xjsr305=strict提供给 Kotlin 编译器。然而,当我仔细检查 Kotlin 的类型时,它们被报告为平台类型,例如:

我做错了什么,我没有得到以下输出?

请注意,Spring Framework 5 有一个类似的注解,名为@NonNullApi.

我正在使用 OpenJDK 11。

PS。我知道我可以用 注释每个方法和参数@Nonnull,但我追求全局行为并将 Kotlin 转换List<T!>List<T>.


这是MCVE:

  • src/main/java/sampleAnnotation/NonNullPackage.java

    /li>
  • src/main/java/foo/package-info.java

    /li>
  • src/main/java/foo/Foo.java

    /li>
  • src/main/kotlin/sampleKotlin/Main.kt

    /li>
  • 构建.gradle

    /li>
0 投票
1 回答
849 浏览

spring - Spring(kotlin)控制器接收数据类的不可为空的参数为空

我面临一个意外错误,我不确定如何处理。

我有一个这样的数据类:

还有一个像这样的简单 Spring 控制器:

当执行到达 payloadProcessor.process 时,会发生空指针异常,因为id它显然是空的。另一方面,对象已创建,其余两个值似乎已正确填充。如果我添加一个检查空值的 if 语句,ide 会抱怨负载属性永远不会为空,将 if 语句标记为冗余,但实际上并非如此。我的印象是 null 安全属性是……嗯…… null 安全的。至少我希望在构造对象后会发生空指针异常。

我的问题是:

  • Spring如何设法创建这样一个对象
  • 为什么在对象构造时没有检测到
  • 处理这个问题的“Kotlin”方法是什么,因为我不想检查一个所谓的空安全对象中的空参数。
0 投票
3 回答
3636 浏览

android - Android Room 将 Null 作为非 Null 类型返回

我必须Dao返回简单的对象。如果 object 不存在,则 Room 返回null,但 Android 应用程序没有崩溃。此外,如果我将该值分配给非空变量,则应用程序中不会发生崩溃。

道:

不崩溃代码:

我有两个问题:

  1. Room 怎么可能将 Null 值作为 Non-Null 变量返回?
  2. 将 null 分配给 Non-Null 变量的代码怎么可能没有崩溃
0 投票
2 回答
211 浏览

kotlin - 从具有可空类型的数组创建不带可空类型的数组

在 Kotlin 中,我们必须区分可空类型和不可空类型。假设我有一个Array<String?>我知道其中的每个值实际上都不为空的 fom。有没有一种简单的方法可以Array<String>从源数组创建一个而不复制它?

0 投票
2 回答
73 浏览

generics - 可空和不可空集合的方法调用

在 Kotlin 中是否可以编写一个可以使用可空集合和不可空集合调用的函数?我想这样的事情:

并不是说我需要这样写,因为我有一个返回值 type C。还要注意out关键字,但即使使用它我也无法调用f(mutableListOf<String?>)f(mutableListOf<String>)工作正常。我必须在这里改变什么,或者在 Kotlin 中这不可能吗?使用数组,这将工作得很好......

0 投票
4 回答
1234 浏览

kotlin - 使用!!在科特林?

最近有一些讨论是否!应该在 kotlin 代码中使用。一种意见是根本不应该使用它,因为它对 kotlin 来说是一种不好的做法,并且会增加崩溃的风险。

另一种意见感觉使用!并不是一件绝对的坏事,只要你知道在任何已知条件下,可空数据在该位置都不应该为空,!!只是那里的安全卫士(如果它在不应该出现的地方意外变为 null !! 将抓住它并引起关注,那么它肯定需要调查)。它不应该考虑使用 !! 是崩溃的原因之一。

有没有人反对或支持使用!! (不要盲目使用)?

下面的两个示例,看不到 dataCount_2 会更好,还是?

0 投票
7 回答
1430 浏览

kotlin - Kotlin 中的非空检查有什么区别?

有一些方法可以在 Kotlin 中完成空值检查:

1.

2.

3.

这些方式有什么区别?

有什么理由(性能、最佳实践、代码风格等)为什么我应该更喜欢其他方式?

0 投票
2 回答
255 浏览

kotlin - Kotlin中的nullabe和不可为空的类型有什么区别

请解释可空类型和不可空类型之间的区别。我是 kotlin 的新手,我很困惑。
谢谢

0 投票
4 回答
7668 浏览

kotlin - 从 kotlin 的集合中过滤掉非空值

看看这个 kotlin one liner:

编译器在这一行给出了一个类型错误,说不能将可空值列表分配给非空值列表。但过滤条件确保列表将仅包含非空值。!!在这种情况下我可以使用类似于运算符的东西来编译这段代码吗?