如何将Class转换为Instance Object

时间:2012-03-15 04:42:36

标签: java reflection

看看我的代码......

    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()) 而且我不知道如何创建它

有人帮忙吗?

抱歉我的英语......

感谢

3 个答案:

答案 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()