在 Kotlin 中引用类型参数化 class 的 Java 静态方法

Reference of a Java static method of a type parametrized class in Kotlin

如何在 Kotlin 中编写对泛型 class 的 Java 静态方法的方法引用?

下面的示例显示 :: 运算符仅适用于非泛型 classes(在本例中为 Colections)。但是,使用相同的方法似乎不适用于具有类型参数的 List 接口。

import java.util.Collections
import java.util.List

fun toSingletonList(item: Int, toList: (Int) -> MutableList<Int>): MutableList<Int> {
    return toList(item)
}

fun main() {
    println(toSingletonList(1, { Collections.singletonList(it) }))
    println(toSingletonList(1, Collections::singletonList))
    println(toSingletonList(1, { List.of(it) }))
    println(toSingletonList(1, List::of))          // not compilable: One type argument expected for interface List<E : Any!>
    println(toSingletonList(1, List<Int>::of))     // not compilable: Unresolved reference: of
}

可以直接导入of()方法:

import java.util.List.of

然后你就可以直接引用它了:

println(toSingletonList(1, ::of))

如果你碰巧运行陷入冲突。例如。通过导入也 Set.of 你可以使用导入别名:

import java.util.List.of as jListOf
import java.util.Set.of as jSetOf

然后使用 that 别名作为方法参考

println(toSingletonList(1, ::jListOf))
println(toSingletonSet(1, ::jSetOf))