Expression Language Lambda-Typ-Inferenz

9

Normalerweise würde ich tun:

%Vor%

Ich war erstaunt zu sehen, dass der folgende EL-Ausdruck funktioniert:

%Vor%

Das Ergebnis des obigen EL-Ausdrucks ist 6 . Wie kann der Compiler den Typ beim Deklarieren von a in Code-Schnipsel 2 ermitteln, benötigt aber Typ-Informationen in Code-Ausschnitt 1?

Auch das kompiliert und führt gut aus:

%Vor%     
Aniket Sahrawat 23.02.2018, 13:47
quelle

2 Antworten

3

Der EL-Evaluator / Executor hat keine Ahnung über den genauen Typ von a in Ihrem EL-Ausdruck. Es weiß nur, dass es ein Number wegen * operation

sein sollte %Vor%

Sehen Sie sich diese Ergebnisse an:

%Vor%

Nur zur Laufzeit erhalten Sie eine Exception, weil Long.parse("32s") fehlschlägt.

Sehen Sie sich diesen Quellcode von ELArithmetic.java # 211

    
dit 23.02.2018, 15:03
quelle
-1

Grundsätzlich ist der Compiler in der Lage, die Typen abzuleiten. Wenn Sie Snippet 1 ein wenig umformulieren, können Sie etwas erhalten, das kompiliert, ohne den Typ Integer explizit zu deklarieren:

%Vor%

Das kommt der Syntax sehr nahe: ${(b -> b * 2)(3)} Der Compiler hat nur bestimmte Schwierigkeiten, die Art der Parameter von Lambda-Ausdrücken zu bestimmen.

    
Calculator 23.02.2018 14:55
quelle

Tags und Links