Function 如何声明泛型扩展函数类型?

Function 如何声明泛型扩展函数类型?,function,generics,kotlin,functional-programming,Function,Generics,Kotlin,Functional Programming,有正常的扩展函数 fun <T> List<T>.test() { } fun String.test(){ } 但不能声明扩展函数类型为泛型的变量 val obj1 = fun String.(){ } val obj2 = fun <T> List<T>.() {} //error val obj2=fun List.({}//错误 另外,我不想使用列表,它不同于泛型 有人能告诉我怎么解决吗?谢谢 扩展函数有点像是在转移注意力。值不能

有正常的扩展函数

fun <T> List<T>.test() { }

fun String.test(){ }
但不能声明扩展函数类型为泛型的变量

val obj1 = fun String.(){ }
val obj2 = fun <T> List<T>.() {} //error
val obj2=fun List.({}//错误
另外,我不想使用
列表
,它不同于泛型


有人能告诉我怎么解决吗?谢谢

扩展函数有点像是在转移注意力。值不能有多态类型,不仅在Kotlin中,在Java、Scala等中也是如此。 根据需要它的原因,一种方法是返回扩展函数的泛型函数:

fun <T> obj2Generic() = fun List<T>.() {}
val obj2ForInt = obj2Generic<Int>()
val obj2ForString = obj2Generic<String>()
fun obj2Generic()=fun List.({}
val obj2ForInt=obj2Generic()
val obj2ForString=obj2Generic()

您不能这样做,就像您不能在不指定类型参数的情况下将常规(非扩展)泛型函数分配给变量或实例化泛型类一样。试着设身处地为编译器着想:这种变量的类型是什么?它也是泛型的,因此只有在另一个泛型上下文中才可能

fun <T> List<T>.test(){ }

val v1 = List::test // No
val v2 = List<String>::test // OK

fun <T> other() {
    val v3 = List<T>::test // OK
    val v4 = fun List<T>.() { } // OK
}
fun List.test(){}
val v1=列表::测试//否
val v2=List::test//OK
其他{
val v3=List::test//OK
val v4=乐趣列表。({}//OK
}

我希望您需要定义自己的接口并实现它,而不是使用传统的函数/lambda。