Während ich einige grundlegende Lambda-Übungen machte, gab mir die Ausgabe einer scheinbar identischen anonymen inneren Klasse eine andere Ausgabe als das Lambda.Lambda verhält sich anders als anonyme innere Klasse
interface Supplier<T> {
T get(T t);
}
Szenario # 1
Supplier<Integer> s1 = new Supplier<Integer>() {
@Override
public Integer get(Integer t) {
return t;
}
};
Supplier<Integer> s2 = t -> t;
System.out.println(s1.get(2));
System.out.println(s2.get(2));
Ausgänge und . Nichts Neues hier.
Aber wenn ich dies tun:
Szenario # 2
Supplier<Integer> s1 = new Supplier<Integer>() {
@Override
public Integer get(Integer t) {
return t++;
}
};
Supplier<Integer> s2 = t -> t++;
System.out.println(s1.get(2));
System.out.println(s2.get(2));
Ausgänge und
FRAGE: Sollte nicht beide Ausgänge sein identisch? Fehle ich etwas?
Aus Gründen der Vollständigkeit halber: Szenario # 3
Supplier<Integer> s1 = new Supplier<Integer>() {
@Override
public Integer get(Integer t) {
return ++t;
}
};
Supplier<Integer> s2 = t -> ++t;
System.out.println(s1.get(2));
System.out.println(s2.get(2));
Ausgänge und . Auch hier nichts Neues.
UPDATE: Noch immer gleiche Ausgabe von 1.8.0-B132
UPDATE # 2: Fehlerbericht:https://bugs.openjdk.java.net/browse/JDK-8038420
UPDATE # 3: Der Fehler in Javac wird behoben, Sie sollte jetzt das gleiche Ergebnis erzielen können.
ich 2 und 2 für die zweiten Code-Schnipsel. –
+1 für kann nicht replizieren –
Nun, das ist interessant. Schauen wir uns hier etwas an, das mit JVM-Versionen/-Builds zu tun hat? Ich verwende Build 1.8.0-ea-b81. Derzeit wird eine neuere Version heruntergeladen. Wird Updates posten. – victorantunes