sehen, ich eine Java-Klasse haben:Warum kann ich nicht Lambda für Schnittstelle bei Kotlin verwenden?
public final class JavaReceiveSingle {
public static void useSingle(Single single) {
single.doSth();
}
public static void useSingle2(SingleInterface singleInterface) {
singleInterface.doSth();
}
}
eine Java-Schnittstelle:
public interface SingleInterface {
void doSth();
}
eine Kotlin Schnittstelle:
interface Single {
fun doSth()
}
Jetzt kann ich Lambda in einer Kotlin Klasse wie verwenden:
JavaReceiveSingle.useSingle2({})
Aber wenn ich will, das Gleiche tun Schnittstelle Kotlin:
JavaReceiveSingle.useSingle({})
IDE Fehler zeigen: Erforderlich: Single! Gefunden:() -> Einheit
Und wenn ich angeben Einzel wie:
JavaReceiveSingle.useSingle(Single{})
Noch Fehler: Schnittstelle Einzelne nicht über Konstrukte!
Obwohl der folgende Code funktioniert:
JavaReceiveSingle.useSingle(object :Single{
override fun aa() {}
})
Aber warum kann ich nicht Lambda für eine Kotlin Schnittstelle verwenden?
Kotlin hat funktionale Typen, e. G. '() -> Unit' ist eine Funktion, die keine Parameter akzeptiert und Unit zurückgibt (kein Wert). Auf diese Weise sind funktionale Schnittstellen und SAM-Konvertierungen überflüssig. –
Also in diesem Fall wird empfohlen, funktionale Typen zu ersetzen traditionelle innere anonyme Klasse? Wenn ja, dann verstehe ich es – user2699165