如何从java目录加载某个类的实例?

时间:2011-03-26 03:43:06

标签: java

这是我的方法:

Feature [] getFeatures(File dir)

我正在尝试浏览目录,检查每个类文件。任何类型为'Feature'的类,我想加载它的一个实例。然后我想返回这些实例的数组。

这是怎么做到的?

谢谢。

编辑:

这就是我现在所拥有的:

private static LinkedList<Feature> getFeaturesInDirectory(File dir) throws ClassNotFoundException {

        LinkedList<Feature> features = new LinkedList<Feature>();

        ClassLoader cl = new IndFeaClassLoader();

        // list all files in directory
        for(String s : dir.list()) {
            Class klass = cl.loadClass(s);
            try {
                Object x = klass.newInstance();
                if (x instanceof Feature) {
                    features.add((Feature)x);
                }
            } catch (InstantiationException ex) {
            } catch (IllegalAccessException ex) {
            }

        }

        return features;

    }

1 个答案:

答案 0 :(得分:1)

使用:

MyClassName mcn = (MyClassName) Class.forName("MyClassName").newInstance();

但请注意,这依赖于ClassLoader。如果类不是来自与当前类(或系统类加载器)相同的位置,则需要指定类加载器:

File myDir = new File("/some/directory/");
ClassLoader loader = null;
try {
    URL url = myDir.toURL();         
    URL[] urls = new URL[]{url};
    ClassLoader loader = new URLClassLoader(urls);
} 
catch (MalformedURLException e) 
{
    // oops
}

MyClassName mcn = 
    (MyClassName) Class.forName("MyClassName", true, loader).newInstance();

认为应该有用,但如果没有,它至少应该让你走上正确的道路。