看看我的代码......
Class<?> c = Class.forName("PerformanceInvokeService");
Method m = c.getDeclaredMethod("monthlyTestCal", new Class[] {
String.class, Date.class });
Object ret = m.invoke("PerformanceInvokeService", new Object[] {
"some string", new Date() });
System.out.println(ret);
我执行这个并抛出异常
java.lang.IllegalArgumentException: object is not an instance of declaring class
我想,因为我没有创建 c 的实例(喜欢...new PerformanceInvokeService()) 我不知道如何创建它
有人帮忙吗?
对不起我的英语...
谢谢
如果
PerformanceInvokeService
有一个可访问的默认构造函数,您可以使用以下方法创建一个新实例:
Object instance = c.newInstance();
然后您可以将其传递给方法调用:
Object ret = m.invoke(instance, new Object[] { "some string", new Date() });
如果没有可访问的默认构造函数,那么您必须找到一个可以通过反射来使用的构造函数。
Class
有一个 newInstance()
方法,您可以调用该方法来使用其默认构造函数创建该类的实例。或者,您可以调用 getConstructor()
或 getConstructors()
来查找采用正确类型参数的构造函数,然后在 newInstance()
对象上调用 Constructor
,传递构造参数。
您需要添加
Object myInstance = c.newInstance();
这将调用默认构造函数并创建一个新对象。然后你可以使用它作为
中的第一个参数m.invoke()
在较新版本的 Java 上尝试以下操作:
resultClass
代表 Class<T> resultClass
Class.newInstance
现已弃用(自 Java 9 起)try {
content.add(resultClass.getDeclaredConstructor().newInstance());
} catch (Exception e) {
log.catching(e);
}
附注也许用
Exception
来捕捉有点过分了。