【问题标题】:Is it possible to create a reference to a companion object generic method in Kotlin?是否可以在 Kotlin 中创建对伴随对象泛型方法的引用?
【发布时间】:2018-01-19 00:08:28
【问题描述】:

是否可以将变量的值设置为方法,该方法位于 Companion 对象上并具有类型参数?类似于以下内容:

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

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

【问题讨论】:

标签: generics kotlin


【解决方案1】:

不,类型系统中没有泛型函数引用的表示。例如,它没有量化类型,它可以表示您尝试以forall T . (T) -&gt; 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-13
    • 1970-01-01
    • 2021-03-25
    • 1970-01-01
    • 2016-05-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多