Tag: 可空

MutableList的add方法抛出kotlin.KotlinNullPointerException异常

请记住,我正在加强功能编程嘿嘿。 我已经定义了一个像这样的可变列表: var list: MutableList<E>? = null 所以,当我尝试使用list!!.add(E())会抛出一个 kotlin.KotlinNullPointerException。 我明白这是因为我给这个列表分配null时,我没有得到一个正确的解决方案思考函数式编程方面如何解决这个问题。 你能建议我一些代码或概念来实现这种情况。

调用不接受kotlin的null的java代码

IDEA社区2017.1.2,JRE 1.8,Kotlin 1.1.2-2 我有位于libGdx中的Java方法,它们没有关于它们的可空性的任何注释,例如: public void render (final RenderableProvider renderableProvider) { renderableProvider.getRenderables(renderables, renderablesPool); 我们可以看到,参数不能为空。 然而,由于没有任何说明它是非空参数,Kotlin会愉快地在RenderableProvider?传递null RenderableProvider? 。 如何告诉Kotlin在编译期间检查我应该传递RenderableProvider而不是RenderableProvider? ? 我已阅读外部注释 ,但没有“指定自定义Kotlin签名”,如果我注释renderableProvider作为@NotNull没有任何更改 – kotlin仍允许为空。 我甚至试图用XML手动替换org.jetbrains.annotations.NotNull与javax.annotation.Nonnull ,但它没有什么区别 – 代码编译和NPE崩溃。

Kotlin mutableMap.put返回空值

在kotlin标准库中我们有MutableMap接口,它有这个方法 public abstract fun put(key: K, value: V): V? 为什么它返回可以为空的值,如果它接受不可为空的值? 这是完成的Java互操作?

我对以下Kotlin声明感到困惑

val s = person.name ?: return 我知道那个? 用于无效安全…但是:return做什么。

Kotlin盒装诠释是不一样的

请帮我理解kotlin文档中的这段代码: val a: Int = 10000 print(a === a) // Prints 'true' val boxedA: Int? = a val anotherBoxedA: Int? = a print(boxedA === anotherBoxedA) // !!!Prints 'false'!!! 现在,我明白了,首先int a = 10000然后在下一行它是使用===进行比较。 现在的问题是,为什么当它分配boxedA=a ,它检查是否为空使用int? 。 它可以写成这样: – val boxedA: Int=a 如果我的理解错误,请有人指导检查一下正确的地方,或者给我解释一下。

有一个getter返回一个不可为空的类型,即使后台字段是可空的

num在设置时应该是可以为空的,但是它返回的值应该总是不可空的(有一个默认值)。 class Test { var num: Int? = null get() = field ?: 5 // default value if null } 即使返回的值总是非空,这对我来说是合理的,因为这种类型不是推断出来的,而是从后台字段中得到的: val a: Int = Test().num 类型不匹配:推断类型是Int? 但国际预期 问题是如何将该getter的返回类型更改为不可空? 如果我这样做,编译器说: Getter返回类型必须等于属性的类型,即“Int?” 我知道我可以用另一个属性numNotNullable (没有后台字段)解决它。 class Test { var num: Int? = null get() = field ?: 5 // default value if null val numNotNullable: Int get() […]

什么是kotlin中的null + null类型?

x是什么类型,为什么是String ? val x = null + null 这是否是一些黑客? 将此字符串与给定的[other]对象的字符串表示形式连接起来。 如果receiver *或[other]对象为null,则表示为字符串“null”。 (c)Library.kt

为什么mutableMapOf返回空值?

我写了一个简单的代码块来在Map存储带有ids fragments 。 map的value和key被初始化为非空value ,但是当我想把它们作为key和value ,它给出nullable为nullable类型数据。 所以,我不明白为什么? 有没有其他类型的地图返回Kotlin non-nullable数据?

Kotlin可以在类文件中发出JSR-305注释

我正在使用https://github.com/vojtechhabarta/typescript-generator的 Kotlin来为我在API中使用的类生成TypeScript定义。 为了保留可空性信息,typescript-generator可以使用字段和方法中的注释。 它支持构建脚本中列出的任意注释类名称。 由于某种原因,Kotlin使用@org.jetbrains.annotations.Nullable而不是JSR-305注释@javax.annotation.Nullable注释可空字段。 虽然JSR-305注释具有RetentionPolicy.RUNTIME ,但Jetbrains注释具有RetentionPolicy.CLASS ,使其不适合通过使用Java Reflection来检测注释的库进行反省。 是否有可能让Kotlin生成基于标准的注释而不是JetBrains专有的注释? 如果没有,我对处理这个问题的简单解决方案感兴趣。 也许是一个Gradle插件,可以从JetBrains或类似的产生JSR-305注释。 我真的不希望双重注释一切? 和@Nullable 。

Kotlin – 检查通用参数是否可选?

我正在写这个通用的方法来从Firebase中获取数据? 在某些情况下返回空有效,在其他情况下是不是有可能检查泛型参数是否可以为空? 前 reference.obsrveObject(User.class) 应该抛出如果null reference.obsrveObject(User?.class) 应该用空值调用onNext fun DatabaseReference.observeSingleEvent(): Observable<DataSnapshot?> { return Observable.create { subscriber -> val valueEventListener = object: ValueEventListener { override fun onDataChange(snapshot: DataSnapshot?) { subscriber.onNext(snapshot) subscriber.onCompleted() } override fun onCancelled(error: DatabaseError?) { subscriber.onError(FirebaseDatabaseThrowable(error)) } } addListenerForSingleValueEvent(valueEventListener) } } fun <T>DatabaseReference.obsrveObject(clazz: Class<T>): Observable<T> { return observeSingleEvent().map { snapshot -> if (snapshot != null) […]