как конвертировать класс в экземпляр объекта - PullRequest
2 голосов
/ 15 марта 2012

взгляните на мой код ....

    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

я думаю, потому что я не создаю экземплярс (любит ... новый PerformanceInvokeService ()), и я не знаю, как его создать

кто-нибудь помочь?

извините за мой английский ...

спасибо

Ответы [ 3 ]

2 голосов
/ 15 марта 2012

Если PerformanceInvokeService имеет доступный конструктор по умолчанию, вы можете создать новый экземпляр, используя:

Object instance = c.newInstance();

Затем вы можете передать его в вызов метода:

Object ret = m.invoke(instance, new Object[] { "some string", new Date() });

Еслинет доступного конструктора по умолчанию, тогда вам нужно будет найти конструктор, который вы можете использовать с помощью отражения.

0 голосов
/ 15 марта 2012

Вам нужно добавить

Object myInstance = c.newInstance();

Это вызовет конструктор по умолчанию и создаст новый объект.Затем вы можете использовать это как первый аргумент в

m.invoke()
0 голосов
/ 15 марта 2012

Class имеет метод newInstance(), который можно вызвать, чтобы создать экземпляр класса, используя его конструктор по умолчанию. Или вы можете вызвать getConstructor() или getConstructors(), чтобы найти конструктор, который принимает правильные аргументы, а затем вызвать newInstance() для объекта Constructor, передав аргументы конструкции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...