是否可以将变量的值设置为方法,其中方法位于Companion对象上并且具有类型参数?如下所示:
class A {
companion object B {
fun <T>foo(n: T) { }
}
}
val b = A.B::foo<T>
答案 0 :(得分:4)
不,类型系统中没有通用函数引用的表示。例如,它没有量化类型,它可以代表您尝试以forall T . (T) -> Unit
形式引用的函数。
您只能对泛型函数进行非泛型引用,为此您必须提供预期类型的具体类型(它取自分配或传递引用的位置),例如,这将起作用:
class A {
object B {
fun <T> foo(n: T) { }
}
}
val b: (Int) -> Unit = A.B::foo // substitutes T := Int
val c: (String) -> Unit = A.B::foo // T := String here
fun f(g: (Double) -> Unit) = println(g(1.0))
f(A.B::foo) // also allowed, T := Double inferred from the expected type