如何为函数类型提供实现?

时间:2019-02-15 15:03:40

标签: kotlin kotlin-function-type

关于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提供实现?

2 个答案:

答案 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-很可能是您尝试访问未初始化的属性(初始化之前访问或在其他实例上访问,等等)