在 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))
如何在 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))