SAM-Konstruktor durch Lambda mit kovariantem Typ ersetzen

9

Ich habe folgende Java-Schnittstellen:

%Vor%

Und die folgende Kotlin-Klasse:

%Vor%

Nun kompiliert die erste Anweisung in der Funktion main , aber IntelliJ gibt eine Warnung aus, dass der SAM-Konstruktor durch ein Lambda ersetzt werden kann. Dies würde die zweite Aussage ergeben.

Diese zweite Anweisung wird jedoch nicht kompiliert, weil it den Typ Any? und nicht A hat. Durch das Entfernen des out -Modifikators wird es erneut kompiliert.

Warum passiert das?

Der Anwendungsfall hierfür ist, wenn die implementierende Klasse von Main Test<B> für die Funktion a() zurückgeben muss, wobei B implementiert A :

%Vor%     
nhaarman 08.04.2016, 09:46
quelle

1 Antwort

1

Es ist ein Compilerfehler. Sie können es hier verfolgen: Ссылка .

    
erokhins 16.05.2016 21:17
quelle

Tags und Links