在Java中动态加载一个类

新手上路,请多包涵

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

原文由 rubixibuc 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 374
2 个回答

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

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

参考 - java.lang.Class

原文由 Amol Katdare 发布,翻译遵循 CC BY-SA 2.5 许可协议

ClassLoader.loadClass 将加载一个类。您通过 myClass.getClassLoader() 获得了一个类加载器 --- 如果它为空,您应该返回到 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");

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

原文由 Mike Samuel 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题