Generics Kotlin中的泛型lambda或函数值类型

Generics Kotlin中的泛型lambda或函数值类型,generics,types,functional-programming,kotlin,Generics,Types,Functional Programming,Kotlin,给定函数 fun <T> to5(x: T): Int = 5 没有 未解析引用:T 错误 换句话说,有没有可能告诉Kotlin funVal类型声明中的T是一个类型参数 例如: val <T> funVal: (T) -> Int = ::to5 val funVal<T>: (T) -> Int = ::to5 val funVal: <T> (T) -> Int = ::to5 val funVal: ((T) -&

给定函数

fun <T> to5(x: T): Int = 5
没有

未解析引用:T

错误

换句话说,有没有可能告诉Kotlin funVal类型声明中的T是一个类型参数

例如:

val <T> funVal: (T) -> Int = ::to5

val funVal<T>: (T) -> Int = ::to5

val funVal: <T> (T) -> Int = ::to5

val funVal: ((T) -> Int) <T> = ::to5
但是我丢失了类型信息:

pairAnyWithAbc(5) // Pair<String, Any>
我能想到的解决办法是:

包装内的一般乐趣基本上不是真正的咖喱或高阶函数的使用

 fun <T> pairAnyWithAbc(t: T) {
        return pairAnyWithAbc(t)
 }
为每种类型创建函数没有像我希望的那样使用泛型

val pairStrWithAbc: (String) -> Pair<String, String> = pairStrWithAny("abc")

val pairIntWithAbc: (Int) -> Pair<String, Int> = pairStrWithAny("abc")

在Kotlin中,只有类和函数可以具有泛型类型参数。如果确实需要属性具有泛型类型,则它必须属于可以提供该泛型类型的类实例,如下所示:

class Foo<T> {
    val funVal: (T) -> Int = ::to5
}

关于这一点还有更多的讨论,我不能将其标记为重复,因为该问题没有公认的答案。

您的用例是什么?@s1m0nw1我添加了该用例
pairAnyWithAbc(5) // Pair<String, Any>
 fun <T> pairAnyWithAbc(t: T) {
        return pairAnyWithAbc(t)
 }
val pairStrWithAbc: (String) -> Pair<String, String> = pairStrWithAny("abc")

val pairIntWithAbc: (Int) -> Pair<String, Int> = pairStrWithAny("abc")
class Foo<T> {
    val funVal: (T) -> Int = ::to5
}