为什么我使用匿名类获取ClassNotFoundException?

时间:2013-12-10 18:58:45

标签: java anonymous-class

我正在使用Tomcat 7并且正在学习JSP。我正在尝试在具有特定扩展名的目录中构建文件列表。我找到了this tutorial,我有以下代码:

package winning;

import java.io.File;
import java.io.FileFilter;
import java.util.List;
import java.util.ArrayList;

public class Winning {
    public List<String> getNames(String directory, String extension){
        final String ext = extension;
        File f = null;
        File[] names;
        List<String> results = new ArrayList<String>();

        f = new File(directory);

        FileFilter filter = new FileFilter() {
            @Override
            public boolean accept(File pathname){
                return true;
            }
        };

        names = f.listFiles(filter);

        for(File file : names){
            results.add(file.getName());
        }

        return results;
    }
}

Tomcat提供的异常是NoClasDefFoundError,但它报告在FileFilter filter = new FileFilter...行抛出了ClassNotFoundException。

如果我摆脱了那个块,我的代码工作得很好,所以我有:

...
f = new File(directory);
// used to be code here
names = f.listFiles(/*no more filter*/);
...

看起来对我来说基本上和示例的代码相同,但它不起作用。这个教程是否真的过时了,或者有没有办法在这里使用匿名类?

1 个答案:

答案 0 :(得分:4)

编译包含匿名类的类时,会生成多个.class个文件。例如,您将获得顶级课程Winning.class和第一个匿名内部课程Winning$1.class

如果您只将Winning.class放在/WEB-INF/classes中,那么当代码尝试加载匿名类时,您会得到ClassNotFoundException