Java8中 區域性內部類訪問的區域性變數不必用final修飾
阿新 • • 發佈:2019-01-09
Java8中,區域性內部類訪問的區域性變數不必用final修飾,這一點和Java7是不一樣的。
下面這段程式碼在Java8中是正確的:
public class LocalInnerClassTest {
public static void main(String[] args) {
LocalInnerClassTest.echo("I like ...");
}
public static void echo(String wordYouSay) {
class Person {
public void say() {
System.out.println(wordYouSay);
}
}
Person person = new Person();
person.say();
}
}
然而,在Java7中,這段程式碼不能通過編譯,會報如下錯誤:
Cannot refer to a non-final variable wordYouSay inside an inner class defined in a different method
這算是Java8(編譯器)提供的一項改進吧。想想,總是要無緣無故給傳給區域性內部類的區域性變數新增一個final修飾,也確實有點兒惱人,這點兒改進多少讓人省點心(語法糖的妙處)。