Podczas wywoływania kodu Java z Kotlin, istnieje SAM conversion tak, że kod Java tak:Korzystanie funkcjonalne interfejsy z typów funkcji w Kotlin
adapter.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view, int position) {
// Do stuff here
}
});
może wyglądać następująco:
adapter.setOnClickListener { view, position ->
// Do stuff
}
Teraz pracuję nad projektem Kotlin i chcę zdefiniować interfejs funkcjonalny jako odbiornik zdarzeń:
interface OnSomeActionListener {
fun onSomeAction(parameter1: Int, parameter2: String)
}
W SomeClass
Mam funkcji, aby ustawić słuchacza:
...
private var onSomeActionListener: OnSomeActionListener? = null
fun setOnSomeActionListener(listener: OnSomeActionListener) {
onSomeActionListener = listener
}
...
I kiedy utworzyć wystąpienie tej klasy i spróbuj wywołać funkcję seter, robię to tak:
val thing = SomeClass()
thing.setOnSomeActionListener(object : OnSomeActionListener {
override fun onSomeAction(parameter1: Int, parameter2: String) {
// Do stuff here
}
})
I "Jestem świadomy, że Kotlin ma typy funkcji, dlatego nie obsługuje konwersji SAM z różnych stron, takich jak this one.
Przeczytałem trochę o typach funkcji, ale nie korzystałem z nich wcześniej.
W jaki sposób powinienem przepisać mój kod, aby móc wywołać funkcję ustawiającą w ten sposób?
val thing = SomeClass()
thing.setOnSomeActionListener { parameter1, parameter2 ->
// Do stuff here
}
.
Dzięki za odpowiedź. Pomyślałem, że treść podzielona na jasne części i napisana jak przewodnik krok po kroku była bardzo pomocna. –