W języku Java 1.8 nie trzeba definiować pola jako final
, aby można było uzyskać dostęp z anonimowych klas.Dostęp do pól klas anonimowych na zgodność z wersją Java 1.8 ze starszymi wersjami
Na przykład, w starszych wersjach:
public void foo(final int bar) {
new Runnable() {
public void run() {
System.out.println(bar);
}
};
}
Ale teraz, na Java 1.8, bar
nie musi być ostateczna:
public void foo(int bar) {
new Runnable() {
public void run() {
System.out.println(bar);
}
};
}
Więc jeśli mogę skompilować mój projekt, a jedynym zasobem zaimplementowanym w Javie 1.8, którego używam, jest to (nie używam żadnych lambd, nowych klas, itp.), czy mój kod będzie wykonywany na komputerach ze starszymi wersjami Javy? Jeśli nie, dlaczego?
może Przegapiłeś to [różnica między ostateczna i skutecznie ostateczna] (http://stackoverflow.com/questions/20938095/difference-between-final-and-effectively- final) –
'javac' po prostu nie pozwala ci połączyć' -source 1.8' z '-target 1.7'. – Holger
Schodzę ze stycznej, ale nie chciałbym kodować w 1.8 bez jawnie deklarowania moich ostatnich argumentów lub zmiennych jako * końcowy *. W przeciwieństwie do innych języków, w których wartości domyślne i vars są domyślnie niezmienne, domyślnie Java, język, zawsze je domyślnie zmienia. Teraz Java 1.8 robi to za kulisami, które skutecznie zacierają linię tego, co zmienne, a co nie. Okropny pomysł, jeśli chodzi o czytelność kodu. –