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

如何从java目录加载某个类的实例?,java,Java,以下是我的方法: 功能[]获取功能(文件目录) 我正在浏览目录,检查每个类文件。任何“Feature”类型的类,我都要加载它的一个实例。然后我想返回这些实例的数组 这是怎么做到的 多谢各位 编辑: 以下是我现在拥有的: private static LinkedList<Feature> getFeaturesInDirectory(File dir) throws ClassNotFoundException { LinkedList<Feature>

以下是我的方法:

功能[]获取功能(文件目录)

我正在浏览目录,检查每个类文件。任何“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;

    }
私有静态LinkedList getFeaturesInDirectory(文件目录)引发ClassNotFoundException{
LinkedList功能=新建LinkedList();
ClassLoader cl=新的IndFeaClassLoader();
//列出目录中的所有文件
for(字符串s:dir.list()){
klass类=cl.loadClass类;
试一试{
对象x=klass.newInstance();
if(特征的x实例){
特征。添加((特征)x);
}
}catch(实例化异常){
}捕获(非法访问例外){
}
}
返回特性;
}
使用:

MyClassName mcn = (MyClassName) Class.forName("MyClassName").newInstance();
但是,请注意,这依赖于类加载器。如果类不是来自与当前类(或系统类加载器)相同的位置,则需要指定类加载器:

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();

我认为这应该行得通,但如果不行,至少应该让你走上正确的道路。

听起来你想创建一个类加载器,加载在目录中找到的.class(或jar)文件?如果他打算使用类路径(或现有的类加载器),他可能不会有'dir'参数?@seand-我只是编辑了一下,试图澄清这一点。如果他试图在当前类的加载位置之外使用随机类,这将需要一些工作,尽管我认为URLClassLoader可能会工作,但我必须看看。我知道我必须使用类加载器,我只是对方法感到困惑。我记得以前这样做过,我使用了类似于“getSystemAsResourceStream”的东西。Brian,我会试试你的方法,然后再给你回复。为了澄清,我有一些包含随机类的包。我希望加载实现接口“功能”的任何类的实例。所以问题是:a)如何获取包中的所有类b)如何检查类以查看它是否实现了“功能”