看看我的代码......
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的实例(喜欢......新的PerformanceInvokeService()) 而且我不知道如何创建它
有人帮忙吗? 抱歉我的英语......感谢
答案 0 :(得分:2)
如果PerformanceInvokeService
具有可访问的默认构造函数,则可以使用以下命令创建新实例:
Object instance = c.newInstance();
然后,您可以将其传递给方法调用:
Object ret = m.invoke(instance, new Object[] { "some string", new Date() });
如果没有可访问的默认构造函数,那么你必须找到一个可以通过反射使用的构造函数。
答案 1 :(得分:0)
Class
有一个newInstance()
方法,您可以使用其默认构造函数调用该方法来创建该类的实例。或者,您可以调用getConstructor()
或getConstructors()
来查找采用正确类型参数的构造函数,然后在newInstance()
对象上调用Constructor
,传递构造参数。
答案 2 :(得分:0)
您需要添加
Object myInstance = c.newInstance();
这将调用默认构造函数并创建一个新对象。然后你可以将它作为
中的第一个参数m.invoke()