关于Kotlin中的函数类型
以下给出异常kotlin.UninitializedPropertyAccessException: lateinit property foo has not been initialized
class SomeClass (){
lateinit var foo: (String) -> Int
}
val result : Int = c.foo("hello")
println("result $result")
以下2个甚至不编译
class SomeClass (){
lateinit var foo: (String) -> Int = 1
}
class SomeClass (){
var foo: (String) -> Int = 1
}
如何为foo
提供实现?
答案 0 :(得分:2)
您可以通过这种方式将foo
函数声明为val
val foo: (String) -> Int = { someIntResult }
并像foo.invoke("")
一样使用它,或者如果您需要使用lateinit var
,则应稍后在课堂上对其进行初始化
答案 1 :(得分:1)
我真的不确定您要实现什么目标,但它应该像@StanislavBondar答案一样简单。
fun main() {
println("Hello, world!!!")
val test = Test()
test.foo = { it.length }
println(test.foo("ass"))
}
class Test {
lateinit var foo: (String) -> Int
}
您可以尝试here
如果它仍然抛出UninitializedPropertyAccessException
-很可能是您尝试访问未初始化的属性(初始化之前访问或在其他实例上访问,等等)