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% 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
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
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:
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.