在Java 1.8上,您不必将字段定义为final
,以便从匿名类进行访问。匿名类字段访问Java 1.8与旧版本的兼容性
例如,在旧版本:
public void foo(final int bar) {
new Runnable() {
public void run() {
System.out.println(bar);
}
};
}
但是,现在,关于Java 1.8,bar
并不需要是最后:
public void foo(int bar) {
new Runnable() {
public void run() {
System.out.println(bar);
}
};
}
所以,如果我编译我的项目,在Java 1.8上实现的惟一资源是我使用的(我没有使用任何lambdas,新类等),我的代码是否可以在具有较旧Java版本的计算机上执行?如果不是,为什么?
你可能错过了这个[之间的差异最终和有效决赛]( http://stackoverflow.com/questions/20938095/difference-between-final-and-effectively-final) –
'javac'根本不允许你将'-source 1.8'和'-target 1.7'结合起来。 – Holger
走出正切,但我不想在1.8中编码,而没有明确声明我的最终参数或变量为* final *。与默认情况下args和vars实际上不可变的其他语言不同,Java(语言)默认情况下始终使它们可变。所以现在,Java 1.8正在做这种幕后魔法,它有效地模糊了可变和不可变的界限。当涉及代码可读性时,这个想法太糟糕了。 –