Tag: kotlin null safety

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

我有以下代码片段: val foo: String? = null foo.run { println(“foo”) } 我在这里有一个可空的variablesfoo ,它实际上被设置为null然后是非安全的.run()调用。 当我运行代码片段时,尽管在null上调用了run方法,我仍然可以打印出来。 这是为什么? 为什么没有NullPointerException ? 为什么编译器允许对一个可选值进行非安全调用? 如果我传递println(foo) ,我在控制台中得到了一个很好的null ,所以我认为foo实际上是null是安全的。

如何使用自定义的类对象在android中的onCreate()中使用正确实现lateinit避免“属性获取或设置器预期”错误

我正在尝试使用Kotlin实现Dialogflow(之前的api.ai)代理与我的Android应用程序的集成。 我检查了关于kotlin lateinit其他问答,Android中的onCreate()生命周期是晚期init实现的理想选择,以避免用空对象编写脏代码和相应的!! 和? 访问Kotlin。 但是在尝试lateinint自定义类的实例时,我lateinint了“ Property getter or setter expected ”的错误。 这里是代码: class AIApplication : Application() { private var activitiesCount: Int = 0 var lateinit settingsManager: SettingsManager //private set private val isInForeground: Boolean get() = activitiesCount > 0 override fun onCreate() { super.onCreate() settingsManager = SettingsManager(this) } 这给了我在lateinit settingsManager行的’ Property getter或setter expected ‘的lateinit settingsManager […]

否则,Kotlin检查两次null

我有一个variablesdatePurchased的项目,可以为null。 根据购买日期,我生成一个标签。 当我检查datePurchased是否为空,否则我仍然必须检查为空。 它说聪明的演员是不可能的,因为这是一个可变的财产。 以下是我迄今为止所尝试的: if (datePurchased == null) { “” } else { if (datePurchased.isToday()) {//error here } } when { datePurchased == null -> { } datePurchased.isToday() -> {//smart cast bla bla mutable bla bla datePurchased?.isToday() -> {//expected Boolean, got Boolean? datePurchased?.isToday()?:false -> {//all good, but does not look nice, since datePurchased can’t […]

Kotlin如果不是空的

什么是最简洁的方式使用iff var不是null ? 我能想到的最好的是: arg?.let { with(it) { }}

Kotlin Null安全警告意外令牌(使用;在同一行上分隔expression式)

我在应用程序中尝试使用Kotlin代码中的Elvis运算符 ,并收到以下警告: Unexpected tokens (use ; to seperate expressions on the same line) 码: var key: String = “KEY is” /* “check” is name of String variable which can be null Warning coming on following statement*/ var str : String = check?key.replace(“KEY”, “ABDS-ASDSA-DSSS”)?:check 任何想法如何解决这个问题?

Kotlin – 安全呼叫运营商的链接。 不必要的话务员

以下面使用安全调用操作符(?。)的示例: class Sample { class A( val sampleB: B? = B() ) class B( val sampleC: C = C() ) class C( val sampleInt: Int = 1 ) fun test() { val intInC: Int? = A().sampleB?.sampleC?.sampleInt } } 我知道我们需要一个安全的调用操作符sampleB。 但是为什么我们需要在sampleC上安全的调用操作符。 如果我删除该运算符,它不会编译。 基于我对运算符的理解,如果sampleB为空,则该行将返回null。 如果sampleB不为null,我们可以确定sampleC不是null,根据它的types。 但为什么Kotlin强制安全调用operatorC?

如何在Kotlin中定义一个可空的委托成员?

我需要用Java来装饰一个实例,并且希望委托在Kotlin(更简单)。 问题是,我得到了定义的编译错误。 我如何定义inner能够接收null? open class ConnectionDecorator(var inner: Connection?) : Connection by inner // Getting an error on the right inner 来自Java的示例用法: new ConnectionDecorator(null).close(); *这是一个简单的例子,试图使用Java中的Kotlin委托,其中传递的内容可以为null。

在Kotlin中处理可空或空列表的习惯方式

假设我有一个List?types的variablesactivities List? 。 如果列表不为空而不是空的,我想做一些事情,否则我想做别的事情。 我想出了以下解决方案: when { activities != null && !activities.empty -> doSomething else -> doSomethingElse } Kotlin有没有更习惯的方式来做到这一点?

Kotlin在空检查后对'可空接收者'不安全的调用'编译错误

这是错误的截图: 我正在使用Intellij v14.0.1 + Kotlin插件v0.9.206。 我的理解是,空检查后,编译器不应该显示我的错误。 我错了吗?

在Kotlin中处理可空或空列表的习惯方式

假设我有一个List<Any>?类型的变量activities List<Any>? 。 如果列表不为空而不是空的,我想做一些事情,否则我想做别的事情。 我想出了以下解决方案: when { activities != null && !activities.empty -> doSomething else -> doSomethingElse } Kotlin有没有更习惯的方式来做到这一点?