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
}