如何在Kotlin中使函数可注入并将该函数作为函数类型传递给其他函数?

问题描述 投票:0回答:1

由于Kotlin函数也被视为数据类型,我想知道是否可以将该函数注入,然后可以将其传递给其他方法。我的意思是使该功能可注射fn: (data) -> Component,然后将其传递给方法

kotlin dagger
1个回答
0
投票

是,您可以使用::运算符引用将创建KFunction1<data, Component>的功能,该功能在kotlin中被视为(data) -> Componentdata.() -> Component

示例:

fun acceptLambda(block: (String) -> Unit) {
    block("Test")
}

// Create function having same argument and return type
// Both of them in same package won't work use either of these
fun String.t1() {
    println(this)
}
fun t2(s: String) {
    println(s)
}

// Call them, by passing the reference
test(String::t1) // Prints: Test
test(::t2)       // Prints: Test

要注意的是,如果您在任何类中都将扩展函数创建为成员函数(就像t1一样,则无法引用它,因此我建议您改用t2之类的函数。

Here有关如何引用构造函数或成员函数的更多信息。

© www.soinside.com 2019 - 2024. All rights reserved.