问题描述
我很确定标题中的问题的答案是“否”。 但是我写了一个简单的代码,尝试编译时出现了一个奇怪的错误。 代码:
open class Animal (val stttt:String,val str:String = "hjm") {
open var fff: String = ""
open var image = ""
open val food = ""
open val habitat = ""
var hunger: Int? = 10
}
class Hippo ( var strrr:Int = 7) : Animal("just") {
override var image = "hippo.jpg"
override var food = "grass"
override val habitat = "water"
}
fun main(args: Array<String>) {
val hippo: Hippo? = Hippo()
hippo?.hunger = 5
println(hippo?.hunger) // println(hippo?.hunger as Int?) works!!
}
代码的最后一行:
println(hippo?.hunger)// println(hippo?.hunger as Int?)可以工作!
河马?.hunger = 5
解决方法
它运行得很好,如下所示:Kotlin Playground example
该错误通常出现在您检查某些内容不为null的地方,因此您可以将其视为非null类型(在这种情况下为Int
),但这不适用于{{ 1}} s,因为它们可以更改,并且可能再次为空-因此您需要使用类似var
的方式,其中将值分配给临时hippo?.hunger?.let { bla bla }
(默认为val
)不能更改。
我不确定您为什么会收到错误消息,也许由于某种原因它正在尝试使用it
调用而不是println(message: Int)
调用?您可以将光标放在println(message: Any?)
上,然后执行println
(或您的等效方法)以找出它认为正在调用的函数。
但是,是的,如果聪明的演员把你弄乱了,那可能是一个错误。像执行操作一样投射到ctrl+Q
是一种操作,或者也可以执行Int?
(let/run
)。
您的主要街区是否已关闭?花括号不见了