Java,另一个方法里面的方法声明?

Dav*_*.it 2 java methods function

我正在研究我的前同事写的一些Java代码,我发现了一些我无法理解的东西.这里我们有一个方法getGeneAvailableTaxonomies(),它似乎包含一个带有自己声明的方法调用,accept().这是真的吗?有可能吗?

这是代码部分:我无法理解从FilenameFilter()到最后的程序的含义.

public List<Integer> getGeneAvailableTaxonomies() {
    List<Integer> availableTaxon = new ArrayList<Integer>();

    File dataDirectory = new File(_currentApplicationPath, String.format("Data"));
    FilenameFilter filter = new FilenameFilter() {
        public boolean accept(File dir, String name) {
            return name.startsWith("gene_") && name.endsWith("_info.info"); //get all info files...
        }
    };
    String[] children = dataDirectory.list(filter);

    for(String child:children) {
        availableTaxon.add(Integer.parseInt(child.substring(child.indexOf("_")+1, child.lastIndexOf("_"))));
    }

    return availableTaxon;
}
Run Code Online (Sandbox Code Playgroud)

cst*_*rtz 8

您看到accept()正在定义的方法的代码部分是所谓的匿名类.

FilenameFilter filter = new FilenameFilter() {
    public boolean accept(File dir, String name) {
        return name.startsWith("gene_") && name.endsWith("_info.info"); //get all info files...
    }
};
Run Code Online (Sandbox Code Playgroud)

这里发生的是创建一个新的类,即FilenameFilter.他们正在实施/覆盖接受方法.可以这样想,但在一个声明中:

class MyFilenameFilter implements FilenameFilter {
    public boolean accept(File dir, String name) {
        return name.startsWith("gene_") && name.endsWith("_info.info"); 
    }
}

FilenameFilter filter = new MyFilenameFilter()
Run Code Online (Sandbox Code Playgroud)