Sur Java 1.8, vous n'avez pas besoin de définir un champ comme final
pour qu'il soit accessible depuis des classes anonymes.Accès aux champs de classes anonymes sur Java 1.8 compatibilité avec les anciennes versions
Par exemple, sur les anciennes versions:
public void foo(final int bar) {
new Runnable() {
public void run() {
System.out.println(bar);
}
};
}
Mais, maintenant, sur Java 1.8, bar
n'a pas besoin d'être définitive:
public void foo(int bar) {
new Runnable() {
public void run() {
System.out.println(bar);
}
};
}
Donc, si je compile mon projet, et la seule ressource implémentée sur Java 1.8 que j'utilise est celle-ci (je n'utilise pas de lambdas, de nouvelles classes, etc.), mon code sera-t-il exécutable sur des ordinateurs avec des versions plus anciennes de Java? Si non, pourquoi?
Vous pourriez manquer cette [différence entre final et efficace finale] (http://stackoverflow.com/questions/20938095/difference-between-final-and-effectively-final) –
'javac' ne vous permet simplement pas de combiner' -source 1.8' avec '-target 1.7'. – Holger
En quittant la tangente, mais je ne voudrais pas coder en 1.8 sans déclarer explicitement mes arguments ou variables finaux comme * final *. Contrairement à d'autres langages où les args et les vars sont effectivement immuables par défaut, Java, le langage, les a toujours rendus mutables, par défaut. Alors maintenant, Java 1.8 fait cette magie dans les coulisses qui brouille effectivement la ligne de ce qui est mutable et de ce qui ne l'est pas. Terrible idée quand il s'agit de la lisibilité du code. –