问题标签 [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 回答
4443 浏览

null - Kotlin 如果不为空

with使用iff a varis not的最简洁方法是什么null

我能想到的最好的是:

0 投票
3 回答
1480 浏览

kotlin - Kotlin 在 if else 中检查 null 两次

我有一个带有变量的项目datePurchased,它可以为空。根据购买日期,我生成一个标签。当我检查 datePurchased 是否为空时,在 else 分支中我仍然必须检查是否为空。它说智能转换是不可能的,因为它是一个可变属性。

这是我到目前为止所尝试的:

0 投票
4 回答
15839 浏览

kotlin - 如何在 Kotlin 中惯用地测试非空、非空字符串?

我是 Kotlin 的新手,我正在寻求帮助来重写以下代码以使其更优雅。

如果我使用以下代码:

编译器会抱怨

谢谢。

0 投票
1 回答
653 浏览

kotlin - Kotlin 可空变量赋值

在 Kotlin 中,此代码是否有更短的语法:

首先我尝试了这个:

但后来我意识到这不是一个任务,所以代码什么都不做。然后我尝试了:

哪个有效,但有点冗长。我会期待这样的事情:

但不幸的是,这不起作用。有什么方法可以用简短的语法来完成这个吗?

我知道我可以这样做:

0 投票
3 回答
3585 浏览

kotlin - 结合 null 安全性和 assertNotNull

在测试中我们通常有assertNotNull,但它不会执行从可为空类型到非可空类型的智能转换。我必须写这样的东西:

assertNotNull仅通过呼叫执行智能投射是否是一种解决方法?你如何解决?

0 投票
1 回答
7376 浏览

kotlin - 如何将 lateinit Kotlin 属性设置为 null

下面的类有一个非常独特的生命周期,这需要我暂时清空lateinit属性

} }

这是框架使用它的方式。

我的lateinit属性是由 dagger 注入的,我需要将它们设置为nullin onDestroyView- 或者有内存泄漏。然而,据我所知(没有反思),这在 kotlin 中是不可能的。我可以使这些属性为空,但这会破坏 Kotlin 的空安全性的目的。

我不太确定如何解决这个问题。理想情况下,可能有某种类型的注释处理器会生成 java 代码以自动清除特定变量onDestroyView

0 投票
2 回答
142 浏览

null - 类属性的 Kotlin 空安全性

如何避免使用!!类的可选属性

我应该创建一个局部变量吗?我认为使用!!不是一个好习惯

0 投票
1 回答
762 浏览

kotlin - Kotlin 空值检查错误

我使用 Java 库。在异常类中有“localizedMessage”字段和“description”字段。我不知道为什么,但是“描述”(即 java 字符串)被识别为字符串!通过 Kotlin,当 "description" 为 null 时,条件 description == null 返回 false。代码示例:

或没有猫王:

它总是尝试显示“描述”,但调试模式下的“评估表达式”在描述 == null 时返回 true(如预期的那样)。

Kotlin 版本是 1.1.1

0 投票
1 回答
833 浏览

kotlin - Kotlin .let {} null 安全大概是错误的错误

使用该.let { }功能时,我注意到在执行以下操作时:

在这种情况下,您必须保证存储桶的安全性, bucket?.或者bucket!!在使用?.letthen 我注意到执行以下操作时已经保证了空安全性:

虽然在存储桶的属性上使用 let 而不是直接在存储桶上使用,但我想知道这是故意还是 Kotlin 插件中的错误(在这种情况下,我在 Android Studio 中遇到了这个问题)

附加信息是,在这种情况下,bucket 是一个local valwhile assignmentVariantName 是一个可为空的 var。

0 投票
2 回答
1063 浏览

null - 一个班轮中的 Kotlin 中 listOf() 为 null,而不是 listOf(value) 为 null?

f()返回一个可为空的值。

我想做的是,
如果f()为空,则获取一个空列表,
否则如果f()不为空,则获取单个项目的列表value

在 Scala 中,我们可以这样做:

或更详细地说

在 Kotlin 中,没有(假设没有 Funktionale 库),并且 null在 ScalaOption中没有toList()不同的 ( )。None: Option

我们有 Elvis 运算符,但 null 将在listOf()函数内部,所以它将是

我们想要的 null 是listOf(/*no argument */),但 Elvis 运算符需要一个参数,因此listOf(f() ?: )会导致编译错误。

至少我们可以做到

但它是一个两班轮。

有什么表达吗?

我将在类的主要构造函数默认参数中使用这个表达式,所以如果它不是一个单行,它将被括在括号中,所以像这样:

这看起来很丑,不是吗?