匿名内部类调用参数需要为final

thinking in java的I/O一章中,有这样的代码:

//: io/DirList3.java
// Building the anonymous inner class "in-place."
// {Args: "D.*\.java"}
import java.util.regex.*;
import java.io.*;
import java.util.*;

public class DirList3 {
    public static void main(final String[] args) {
        File path = new File(".");
        String[] list;
        if (args.length == 0)
            list = path.list();
        else
            list = path.list(new FilenameFilter() {
                private Pattern pattern = Pattern.compile(args[0]);

                public boolean accept(File dir, String name) {
                    return pattern.matcher(name).matches();
                }
            });
        Arrays.sort(list, String.CASE_INSENSITIVE_ORDER);
        for (String dirItem : list)
            System.out.println(dirItem);
    }
}/* Output:
DirectoryDemo.java
DirList.java
DirList2.java
DirList3.java
*///:~

使用final关键字,旨在不希望直接在局部修改变量参数值,而且局部变量的值仅仅在范围内有效,同时内部类的变量却一直保存,这种情况使用final关键字起到拷贝的作用。

同样的,在容器的双括号初始化中,之前也不支持在初始化内部调用非final的变量(在jdk1.8以后改变)。

猜你喜欢

转载自blog.csdn.net/u013146766/article/details/79649587