Ich habe einen Beispiel-Java-Code mit Methodenreferenz, die ich auf Kotlin umschreiben möchte. Java-Version verwendet Methodenreferenz, Lösung ist kurz und klar. Aber auf der anderen Seite kann ich in Kotlin keine Methodenreferenz verwenden. Die einzige Version, die ich geschrieben habe, ist eine, die unten vorgestellt wird. Es scheint so, als ob Function3 { s: String, b: Boolean, i: Int -> combine(s, b, i) }
sauberer geschrieben werden könnte (wenn möglich wäre die Methodenreferenz perfekt).Rewrite Java-Code in Kotlin mit Funktionsreferenz auftritt SAM-Typen Konflikt
Ich bin neu in Kotlin, also werde ich für Hinweise dankbar sein.
Java
import io.reactivex.Observable;
public class TestJava {
Observable<String> strings() {
return Observable.just("test");
}
Observable<Boolean> booleans() {
return Observable.just(true);
}
Observable<Integer> integers() {
return Observable.just(1);
}
void test() {
Observable.combineLatest(strings(), booleans(), integers(),
this::combine);
}
double combine(String s, boolean b, int i) {
return 1.0;
}
}
Kotlin
import io.reactivex.Observable
import io.reactivex.functions.Function3
class TestKotlin {
fun strings(): Observable<String> {
return Observable.just("test")
}
fun booleans(): Observable<Boolean> {
return Observable.just(true)
}
fun integers(): Observable<Int> {
return Observable.just(1)
}
fun test() {
Observable.combineLatest(strings(), booleans(), integers(),
Function3 { s: String, b: Boolean, i: Int -> combine(s, b, i) })
}
fun combine(s: String, b: Boolean, i: Int): Double {
return 1.0
}
}
EDIT
Nach Methode Referenzen in Kotlin gibt einen Fehler.
fun test() {
Observable.combineLatest(strings(), booleans(), integers(), this::combine)
}
fun test() {
Observable.combineLatest(strings(), booleans(), integers(), TestKotlin::combine)
}
Keiner der folgenden Funktionen können mit den Argumenten aufgerufen werden geliefert: @CheckReturnValue @SchedulerSupport public final Spaß combineLatest (p0: ((Observer) -> Unit) !, p1: ((Observer) -> Einheit!!, P2: ((Beobachter) -> Einheit) !, p3: ((???, ???, ???) -> ???)!): Observable < (?? ? .. ???)>! in io.reactivex.Observable definiert @CheckReturnValue @SchedulerSupport Öffentlichkeit zugänglich Spaß combineLatest (p0: ObservableSource !, p1: ObservableSource !, p2: ObservableSource !, p3: io.reactivex.functions.Function3!): beobachtbare < (? ?? .. ???)>! in io.reactivex.Observable definiert @CheckReturnValue @SchedulerSupport Öffentlichkeit zugänglich Spaß combineLatest (p0: Funktion !, aus (??? .. ???)> !, p1: Int, Vararg p2: ObservableSource!): beobachtbare < (??? .. ???)>! definiert in io.reactivex.Observable
EDIT 2
RxKotlin löst Problem in Antwort erwähnt.
import io.reactivex.rxkotlin.Observables
class TestKotlin {
fun test() {
Observables.combineLatest(strings(), booleans(), integers(), this::combine)
}
}
Erstens, ich bin nicht der Wermutstropfen. Hast du es versucht? –
_ "Ich kann in Kotlin keine Methodenreferenz verwenden" _ Warum nicht? –
@ Holi-Java natürlich versuchte ich –