是否可以在Kotlin中创建对伴随对象泛型方法的引用?

时间:2018-01-19 00:08:28

标签: generics kotlin

是否可以将变量的值设置为方法,其中方法位于Companion对象上并且具有类型参数?如下所示:

class A {
    companion object B {
        fun <T>foo(n: T)  { }
    }
}

val b = A.B::foo<T>

1 个答案:

答案 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