我有一个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...
这是上面代码所在的类,而不是被调用的构造函数。
答案 0 :(得分:0)
从javadoc开始,在执行构造函数期间发生异常时抛出InvocationTargetException
:
InvocationTargetException - 如果底层构造函数抛出异常。
检查参数(id和详细信息)是否对构造函数有效,以及它们是否可以生成异常。