是否可以在 Kotlin 中使用 println 作为函数引用
is it possible to use println as a function reference in Kotlin
在 Java 8 和 9 中可以有打印到控制台的方法参考,例如:
List.of(1, 2, 3).forEach(System.out::println);
在 Kotlin 中,我没有找到使用方法引用打印到控制台的方法。我试图将其翻译为使用函数参考:
listOf(1, 2, 3).forEach { println(it) }
至:
listOf(1, 2, 3).forEach { ::println }
但是我收到这个错误:
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
如何解决这个分辨率不明确的问题?在这种情况下是否可以使用函数引用?
问题是您传递的函数 return 又是函数 println
,因此编译器无法确定 println
到 [=17] =].你想要做的是使用 println
本身作为参数,为此你需要使用 ()
:
listOf(1, 2, 3).forEach(::println)
在 Java 8 和 9 中可以有打印到控制台的方法参考,例如:
List.of(1, 2, 3).forEach(System.out::println);
在 Kotlin 中,我没有找到使用方法引用打印到控制台的方法。我试图将其翻译为使用函数参考:
listOf(1, 2, 3).forEach { println(it) }
至:
listOf(1, 2, 3).forEach { ::println }
但是我收到这个错误:
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
如何解决这个分辨率不明确的问题?在这种情况下是否可以使用函数引用?
问题是您传递的函数 return 又是函数 println
,因此编译器无法确定 println
到 [=17] =].你想要做的是使用 println
本身作为参数,为此你需要使用 ()
:
listOf(1, 2, 3).forEach(::println)