Java:使用参数从类名动态创建对象

时间:2018-05-29 13:47:59

标签: java reflection

我有一个Java类,其名称存储在数据库中,我想在运行时加载。我使用反射尝试这样做,但当前代码抛出一个InvocationTargetException:

String classname = "my.test.path.Class";
String details = "Some text";
Integer id = 123;

Class<?> cls = Class.forName(classname);
Constructor<?> cons = cls.getConstructors();
for (Constructor<?> con : cons) {
    System.out.println(con.toString()); // Does find the constructor
}
Constructor<?> constructor = cls.getConstructor(Integer.class, String.class);
ClassInterface object = (ClassInterface) constructor.newInstance(id, details);

System.out.println的输出是:

public my.test.path.Class(java.lang.Integer, java.lang.String) throws java.sql.SQLException,java.lang.ClassNotFoundException

例外情况如下:

java.lang.reflect.InvocationTargetException
  at test.path.Main...

这是上面代码所在的类,而不是被调用的构造函数。

1 个答案:

答案 0 :(得分:0)

javadoc开始,在执行构造函数期间发生异常时抛出InvocationTargetException

  

InvocationTargetException - 如果底层构造函数抛出异常。

检查参数(id和详细信息)是否对构造函数有效,以及它们是否可以生成异常。