gil*_*des 0 java kotlin method-reference
在Java 8和9中,可以使用方法引用来打印到控制台,例如:
List.of(1, 2, 3).forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)
在Kotlin中,我没有找到使用方法引用打印到控制台的方法.我试图将其翻译为使用函数引用:
listOf(1, 2, 3).forEach { println(it) }
Run Code Online (Sandbox Code Playgroud)
至:
listOf(1, 2, 3).forEach { ::println }
Run Code Online (Sandbox Code Playgroud)
但是我收到了这个错误:
Overload resolution ambiguity. All these functions match.
@InlineOnly public inline fun println(): Unit defined in kotlin.io
@InlineOnly public inline fun println(message: Any?): Unit defined in kotlin.io
@InlineOnly public inline fun println(message: Boolean): Unit defined in kotlin.io
@InlineOnly public inline fun println(message: Byte): Unit defined in kotlin.io
@InlineOnly public inline fun println(message: Char): Unit defined in kotlin.io
@InlineOnly public inline fun println(message: CharArray): Unit defined in kotlin.io
@InlineOnly public inline fun println(message: Double): Unit defined in kotlin.io
@InlineOnly public inline fun println(message: Float): Unit defined in kotlin.io
@InlineOnly public inline fun println(message: Int): Unit defined in kotlin.io
@InlineOnly public inline fun println(message: Long): Unit defined in kotlin.io
@InlineOnly public inline fun println(message: Short): Unit defined in kotlin.io
Run Code Online (Sandbox Code Playgroud)
我怎样才能解决这个分辨率的模糊性?在这种情况下是否可以使用函数引用?
问题是你传递的函数又返回了函数println,因此编译器无法确定println要返回的函数.你想要做的是将println自己用作参数,你需要使用它():
listOf(1, 2, 3).forEach(::println)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
328 次 |
| 最近记录: |