2017-11-25 14 views
0

의 함수 참조로에 println 사용하는 것입니다은 가능한 예처럼, 콘솔에 인쇄하는 방법 참조가있을 자바 8, 9가 가능하다에서 코 틀린

List.of(1, 2, 3).forEach(System.out::println); 

코 틀린에 내가 발견하지 않은 방법 참조를 사용하여 콘솔로 인쇄하는 방법.

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 

가 어떻게이 해상도 모호성을 해결할 수

listOf(1, 2, 3).forEach { println(it) } 

에 :이 함수 참조를 사용하는 번역하려고 노력 해요? 이 경우 함수 참조를 사용할 수 있습니까?

+0

코 틀린은 올바른 과부하 및 사용을 호출하는 래퍼 함수를 ​​만들 수 있습니다 과부하 지정을 지원하지 않는 경우 그 대신. –

+1

문서 도구 링크 : https://kotlinlang.org/docs/reference/reflection.html#function-references – chris

답변

6

문제는 함수 println을 차례로 반환하는 함수를 전달하므로 컴파일러는 반환 할 println을 알 수 없습니다. 당신이하고 싶은하는 당신이 ()를 사용해야 인수로 사용 println 자체이다 :

listOf(1, 2, 3).forEach(::println) 
+0

thanks thanks. 이것이 그렇게 간단하지 않다고 상상하지 못했습니다. –