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)
您看到accept()正在定义的方法的代码部分是所谓的匿名类.
Run Code Online (Sandbox Code Playgroud)FilenameFilter filter = new FilenameFilter() { public boolean accept(File dir, String name) { return name.startsWith("gene_") && name.endsWith("_info.info"); //get all info files... } };
这里发生的是创建一个新的类,即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)