繁体   English   中英

用Java动态加载类

[英]Dynamically loading a class in Java

我查了一下语法并搜索了api,但仍然对这个过程感到困惑。 我还搜索了Stackoverflow。 加载类并动态创建对象的正确方法是什么? 换句话说,我希望用户指定他们想要创建的对象类型,然后创建该类型的对象。 我不想要菜单,因为我希望他们能够选择当前目录中的任何类。

假设该类具有无参数构造函数,最简单的方法是 -

Object newObject = Class.forName(strFullyQualifiedClassName).newInstance();

参考 - java.lang.Class

ClassLoader.loadClass将加载一个类。 你可以通过myClass.getClassLoader()得到一个类加载器,如果为null,你应该回到ClassLoader.getSystemClassLoader()

一旦有了类实例,就可以通过getDeclaredConstructor(...)获取它的构造函数。 因此,如果你有一个public class MyClass ,其构造函数如public MyClass(String) { ... }那么

Class<MyClass> clazz = MyClass.class;
Constructor<MyClass> ctor = clazz.getDeclaredConstructor(String.class);
MyClass instance = ctor.newInstance("foo");

以上忽略了一堆可能的异常。

这就是我的工作。 这不是一个完成的产品,但只是测试,看看我是否可以让它工作。 谢谢所有回答问题的人:-)。

public class SimLoader {  
  public static void main(String[] args)  
  {  
    try  
    {  
    Object simulator = Class.forName("SimX").newInstance();  
    ((SimInterface)simulator).run();  
    }  
    catch(ClassNotFoundException e) {}  
    catch(InstantiationException e) {}  
    catch(IllegalAccessException e) {}  
    }  
  }  
interface SimInterface {  
 void run();  
}  
class SimX implements SimInterface  
{  
  public void run() {  
    System.out.println("Success");  
  }  
}  

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM