Непонятно по вашему вопросу, но при условии, что вы пытаетесь дублировать функциональность из Java:
В Kotlin вы не используете интерфейсы функций напрямую, потому что функции являются первоклассными. Function1, Function2, et c. классы используются только для того, чтобы сделать функции доступными для кода Java и JVM.
Если вы хотите создать эквивалент Java Function<T, R>
, вы должны определить функцию, используя либо Kotlin ' s fun
или лямбда-синтаксис.
fun getStringLength(x: String): Int {
return x.length
}
//...
val functionReference = ::getStringLength
// Java code will treat this as a Function1<String, Int>
или
val function = fun (x: String): Int {
return x.length
}
// Java code will treat this as a Function1<String, Int>
или
val functionReference = { x: String -> x.length }
// Java code will treat this as a Function1<String, Int>
Чтобы объявить, что функция принимает функцию в качестве параметра, вы используйте синтаксис (input) -> output
в качестве типа переменной:
fun <T, R> doSomething(functionalReference: (T) -> R) {
//
}
Вы можете вызвать функцию, используя ее ссылочное имя:
fun <T, R> doSomething(input: T, functionalReference: (T) -> R): R {
return functionalReference(input)
}