用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 clazz = MyClass.class; Constructor 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"); } }