问题标签 [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.
android - Kotlin 中的非空值产生空指针异常
我有一个不可为空的值数组,如下所示:
它是这样填充的:
最多有 3 种不同的方法可以像这样填充它,具体取决于代码流。一旦数组被填充,它就会被处理:
所有这些都在 AsyncTask doInbackground 中完成。
调用 dog.bark() 时,我间歇性地收到以下异常:
致命异常:java.lang.RuntimeException 执行 doInBackground() 时发生错误
简而言之,非空对象的 ArrayList 有时会包含一个空对象。我试图弄清楚这是怎么发生的。如果将非空值添加到 ArrayList 中,我希望 Kotlin 会抱怨,当然我不确定这首先是如何发生的,因为我只在数组中放置了非空值。线程问题?欢迎任何想法:) 谢谢。
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>
spring - Spring(kotlin)控制器接收数据类的不可为空的参数为空
我面临一个意外错误,我不确定如何处理。
我有一个这样的数据类:
还有一个像这样的简单 Spring 控制器:
当执行到达 payloadProcessor.process 时,会发生空指针异常,因为id
它显然是空的。另一方面,对象已创建,其余两个值似乎已正确填充。如果我添加一个检查空值的 if 语句,ide 会抱怨负载属性永远不会为空,将 if 语句标记为冗余,但实际上并非如此。我的印象是 null 安全属性是……嗯…… null 安全的。至少我希望在构造对象后会发生空指针异常。
我的问题是:
- Spring如何设法创建这样一个对象
- 为什么在对象构造时没有检测到
- 处理这个问题的“Kotlin”方法是什么,因为我不想检查一个所谓的空安全对象中的空参数。
android - Android Room 将 Null 作为非 Null 类型返回
我必须Dao
返回简单的对象。如果 object 不存在,则 Room 返回null
,但 Android 应用程序没有崩溃。此外,如果我将该值分配给非空变量,则应用程序中不会发生崩溃。
道:
不崩溃代码:
我有两个问题:
- Room 怎么可能将 Null 值作为 Non-Null 变量返回?
- 将 null 分配给 Non-Null 变量的代码怎么可能没有崩溃?
kotlin - 从具有可空类型的数组创建不带可空类型的数组
在 Kotlin 中,我们必须区分可空类型和不可空类型。假设我有一个Array<String?>
我知道其中的每个值实际上都不为空的 fom。有没有一种简单的方法可以Array<String>
从源数组创建一个而不复制它?
generics - 可空和不可空集合的方法调用
在 Kotlin 中是否可以编写一个可以使用可空集合和不可空集合调用的函数?我想这样的事情:
并不是说我需要这样写,因为我有一个返回值 type C
。还要注意out
关键字,但即使使用它我也无法调用f(mutableListOf<String?>)
但f(mutableListOf<String>)
工作正常。我必须在这里改变什么,或者在 Kotlin 中这不可能吗?使用数组,这将工作得很好......
kotlin - 使用!!在科特林?
最近有一些讨论是否!应该在 kotlin 代码中使用。一种意见是根本不应该使用它,因为它对 kotlin 来说是一种不好的做法,并且会增加崩溃的风险。
另一种意见感觉使用!并不是一件绝对的坏事,只要你知道在任何已知条件下,可空数据在该位置都不应该为空,!!只是那里的安全卫士(如果它在不应该出现的地方意外变为 null !! 将抓住它并引起关注,那么它肯定需要调查)。它不应该考虑使用 !! 是崩溃的原因之一。
有没有人反对或支持使用!! (不要盲目使用)?
下面的两个示例,看不到 dataCount_2 会更好,还是?
kotlin - Kotlin 中的非空检查有什么区别?
有一些方法可以在 Kotlin 中完成空值检查:
1.
2.
3.
这些方式有什么区别?
有什么理由(性能、最佳实践、代码风格等)为什么我应该更喜欢其他方式?
kotlin - Kotlin中的nullabe和不可为空的类型有什么区别
请解释可空类型和不可空类型之间的区别。我是 kotlin 的新手,我很困惑。
谢谢
kotlin - 从 kotlin 的集合中过滤掉非空值
看看这个 kotlin one liner:
编译器在这一行给出了一个类型错误,说不能将可空值列表分配给非空值列表。但过滤条件确保列表将仅包含非空值。!!
在这种情况下我可以使用类似于运算符的东西来编译这段代码吗?