1. 程式人生 > >Java8中 區域性內部類訪問的區域性變數不必用final修飾

Java8中 區域性內部類訪問的區域性變數不必用final修飾

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修飾,也確實有點兒惱人,這點兒改進多少讓人省點心(語法糖的妙處)。