Kotlin

2015-01-19 8 views
39

'da belirli bir örneğin yöntemine başvuru Java 8'de, bir Sınıf örneğinin yöntemine başvuru yapabiliriz. İşte bir sınıf yöntemi Object getItem(int i) sahiptir Adapter bir örneğidir örneğidirKotlin

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

bu.

Aynı şeyi Kotlin'de yapabilir miyiz? Aynı sözdizimini başarılı olmadan denedim.

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

Ama burada yine de çağırmak için bir Adapter bir örneğini gerekir: Bugüne kadar yalnızca şöyle bir uzantısı yöntemi referans oluşturmak başardı. Gördüğüm diğer alterantive böyle bir lambda tanımlanmasıdır:

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

Yakalama referansları henüz desteklenmiyor, ancak ileriki –

+0

olası yinelemesinde desteklenecek [Kotlin: bir işlevi parametre olarak başka bir işleve nasıl geçirebilirim?] (Http://stackoverflow.com/questions/16120697/kotlin- nasıl-to-pass-a-function-olarak-diğer-parametre-parametre- – Ram

+0

Bir lambda kullanarak senin seçenek 1.0 olarak güncel en iyi yöntemdir, ancak gelecekte desteklenecek gibi değişecek @AndreyBreslav –

cevap

20

KOTLIN 1.1 olduğundan, bunu yapmak için bound callable references kullanabilirsiniz:

val f = a::getItem 

list.forEach(myObject::myMethod) 

önceki Kotlin versiyonları don' Bu özelliğe sahip olmalı ve these simple cases hariç her seferinde bir lambda hazırlamanızı gerektirir.

+1

Teklif bağlantısı için teşekkürler. Bir Companion nesnesinin işlevi için, yalnızca bu sözdizimi [Kotlin 1.3] ile çalışır: “(ClassA) :: function” veya “ClassA.Companion :: function” gibi görünüyor. İlki sadece Kotlin'de kullanılabilir, bu yüzden Java ve Kotlin kodu arasındaki tutarlılık için, eğer Java'da da başvurmanız gerekiyorsa ikinci sözdizimini kullanmak daha iyidir. – Metallica