2015-01-19 5 views
39

Java 8에서는 Class '인스턴스의 메소드에 대한 참조를 가질 수 있습니다. 여기 클래스있어서 Object getItem(int i)을 갖는다 Adapter의 인스턴스 예Kotlin의 특정 인스턴스 메소드에 대한 참조

Function1<Integer, Object> ref = a::getItem; 

이다.

우리는 Kotlin에서 동일한 작업을 수행 할 수 있습니까? 나는 성공하지 않고 같은 구문을 시도했다.

val ref: Adapter.(Int) -> Any = Adapter::getItem 

그러나 여기에서 나는 아직도 그것을 호출하는 Adapter의 인스턴스가 필요합니다 지금까지 난 단지과 같이 확장 메서드의 참조를 만들 수 있었다. 내가 볼 다른 alterantive은 다음과 같이 람다를 정의한다 :

val ref: (Int) -> Any = { a.getItem(it) } 
+11

캡처 참조는 아직 지원되지 않지만 나중에 지원 될 예정입니다. –

+0

[Kotlin : 다른 함수에 매개 변수로 함수를 전달하는 방법?] (http://stackoverflow.com/questions/16120697/kotlin- 매개 변수를 다른 것으로 전달하는 방법) – Ram

+0

람다를 사용하는 옵션은 현재 1.0으로 현재 최선의 방법입니다. @AndreyBreslav에 언급 된대로 향후 변경 될 수 있습니다. –

답변

20

코 틀린 1.1 있기 때문에, 당신이 할 bound callable references를 사용할 수 있습니다

val f = a::getItem 

list.forEach(myObject::myMethod) 

이전 코 틀린 버전의 돈을 ' 이 기능을 가지고 있으며 these simple cases을 제외하고 매번 람다를 만들 것을 요구합니다.

+1

제안 링크에 감사드립니다. 컴패니언 객체의 함수의 경우이 구문 만 [Kotlin 1.3] :'(ClassA) :: function' 또는'ClassA.Companion :: function'과 같이 작동합니다. 첫 번째는 Kotlin에서만 사용할 수 있으므로 Java와 Kotlin 코드 간의 일관성을 유지하려면 Java에서도 참조해야하는 경우 두 번째 구문을 사용하는 것이 좋습니다. – Metallica

관련 문제