In Java 1.8, non è necessario definire un campo come final
in modo che sia tratto dalle classi anonime.Campo di classi anonimi che accedono alla compatibilità con Java 1.8 con le versioni precedenti
Per esempio, su versioni precedenti:
public void foo(final int bar) {
new Runnable() {
public void run() {
System.out.println(bar);
}
};
}
Ma, ora, su Java 1.8, bar
non ha bisogno di essere definitiva:
public void foo(int bar) {
new Runnable() {
public void run() {
System.out.println(bar);
}
};
}
Quindi, se io compilo il mio progetto, e l'unica risorsa implementata su Java 1.8 che sto usando è questa (non sto usando nessun lambda, nuove classi, ecc.), il mio codice sarà eseguibile su computer con versioni Java precedenti? Se no, perché?
si potrebbe perdere questo [Differenza tra finale e in modo efficace finale] (http://stackoverflow.com/questions/20938095/difference-between-final-and-effectively-final) –
'javac' semplicemente non ti permette di combinare' -source 1.8' con '-target 1.7'. – Holger
Uscire dalla tangente, ma non vorrei inserire il codice in 1.8 senza dichiarare esplicitamente il mio argomento finale o le variabili come * final *. A differenza di altri linguaggi in cui args e vars sono effettivamente immutabili per impostazione predefinita, Java, il linguaggio, li ha sempre resi mutabili, per impostazione predefinita. Così ora, Java 1.8 sta facendo questa magia dietro le quinte che sfuma efficacemente la linea di ciò che è mutevole e ciò che non lo è. Un'idea terribile per quanto riguarda la leggibilità del codice. –