智能转换为“类型”是不可能的,因为“变量”是一个可以改变的可变属性
Kotlin新手问道: “为什么下面的代码不能编译?” :
var left: Node? = null fun show() { if (left != null) { queue.add(left) < ERROR } }
智能投到'节点'是不可能的,因为'n.left'是一个可以改变的属性,可以在这个时候改变
我得到left
是可变的变量,但我明确地检查n.left != null
, left
是Node
类型,为什么它不能被智能转换为该类型?
我怎样才能解决这个优雅? 🙂
在执行n.left != null
和queue.add(n.left)
另一个线程可能n.left
的值n.left
为null
。
要解决这个问题,你有几个选择。 这里有一些:
-
使用智能转换使用本地变量:
val left = n.left if (left != null) { queue.add(left) }
-
请使用以下安全呼叫之一:
n.left?.let { left -> queue.add(left) } n.left?.let { queue.add(it) } n.left?.let(queue::add)
-
使用Elvis操作符 跳转到封闭
while
循环的下一步:queue.add(n.left ?: continue)
- Kotlin与Spring DI:lateinit属性尚未初始化
- 使用kotlin-dsl访问gradle源代码集
- 可循环观察的代表
- 如何从Firebase数据库检索数据并将其存储在ListArray <Class>中? – Kotlin
- Android studio 3稳定版“房间1(RC)”的“app:kaptDebugKotlin”错误
- Android – Kotlin:异步乐趣中的返回值
- 我怎样才能实例java类像A:扩展B在kotlin中实现C.
- Android Studio 3.0 Canary 1:引用Kotlin类的Kotlin测试或Java测试失败
- IntelliJ IDEA无法findorg.jetbrains.kotlin:kotlin-gradle-plugins