如果第二個例子有權訪問外部變量,它會違反什麼語義?爲什麼實例初始化程序要求* final *用於Java中的外部變量?
class A {
void f() {
int outer = 1;
// Access non-final outer variable through helper method
new A() {
int inner;
void init(int inner) {
this.inner = inner;
}
}.init(outer); // OK
// Access non-final outer variable through instance initializer
new A() {
{
// int inner = outer; // Does not compile
}
};
outer = 2;
}
}
第二個根本沒有語義,因爲它沒有編譯。 – EJP
@EJP好的,但爲什麼? –
這個要求是不是已經從Java 8中刪除了? – vikingsteve