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

Generics 是否可以在Kotlin中创建对伴生对象泛型方法的引用?,generics,kotlin,Generics,Kotlin,如果方法位于伴生对象上且具有类型参数,是否可以将变量的值设置为方法?如下所示: class A { companion object B { fun <T>foo(n: T) { } } } val b = A.B::foo<T> A类{ 伴星B{ fun-foo(n:T){} } } valb=A.b::foo 否,类型系统中没有泛型函数引用的表示。例如,它没有量化的类型,可以用forall T这样的形式表示您试图引用的函数。(T)

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

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

val b = A.B::foo<T>
A类{
伴星B{
fun-foo(n:T){}
}
}
valb=A.b::foo

否,类型系统中没有泛型函数引用的表示。例如,它没有量化的类型,可以用
forall T这样的形式表示您试图引用的函数。(T) ->装置

您只能对泛型函数进行非泛型引用,为此,您必须提供预期类型中的具体类型(从引用被分配或传递的位置获取),例如,这将起作用:

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
A类{
对象B{
fun-foo(n:T){}
}
}
valb:(Int)->Unit=A.b::foo//T:=Int
val c:(String)->Unit=A.B::foo//T:=此处的字符串
funf(g:(双)->单位)=println(g(1.0))
f(A.B::foo)//也允许,T:=从预期类型推断出的Double

不完全重复,但相关: