Betrachten Sie die folgende Java-Klasse:Lambda-Ausdrücke in Kotlin
public class SomeClass {
public interface Something {
void doSomething();
}
public void call(Something something) {}
}
In Kotlin, kann ich einen Lambda-Ausdruck wie folgt verwenden:
SomeClass().call {
// do something
}
Aber wenn ich die folgende Methode in Kotlin definieren (mit die gleiche Schnittstelle):
fun call(something: Something) {}
Dann ist dieser Aufruf:
call {
// do something
}
würde einen Typenkonfliktfehler erzeugen. Warum?
Diese Entscheidung sieht für mich komisch aus. Betrachte 'Liste <(T) -> Einheit>' vs 'Liste>'. Die zweite trägt viel mehr Informationen. Glücklicherweise gibt es einen Workaround: Wir können Java-Code frei in Kotlin-Projekten verwenden. –
Yaroslav
Obwohl diese Umgehungslösung nicht viel verwendet :( – Yaroslav
Benannte Funktionstypen sind eine andere Geschichte. Und sie werden in der nächsten Version von Kotlin unterstützt –