【发布时间】:2014-06-17 13:57:05
【问题描述】:
在 Java 1.8 上,您不必将字段定义为 final 即可从匿名类访问。
例如,在旧版本上:
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 上实现的唯一资源是这个(我没有使用任何 lambda、新类等),我的代码是否可以在具有旧 Java 的计算机上执行版本?如果不是,为什么?
【问题讨论】:
-
javac根本不允许您将-source 1.8与-target 1.7结合使用。 -
离题了,但我不想在没有明确声明我的最终参数或变量为 final 的情况下在 1.8 中编码。与 args 和 vars 在默认情况下实际上是不可变的其他语言不同,Java,这种语言,默认情况下总是使它们可变。所以现在,Java 1.8 正在做这种幕后魔术,有效地模糊了可变与不可变的界限。在代码可读性方面的想法很糟糕。
标签: java java-8 final anonymous-class