Подтвердить что ты не робот

Java Reflection - Объект не является экземпляром объявления класса

Этот вопрос задают везде в Google, но у меня все еще есть проблемы с ним. Вот что я пытаюсь сделать. Так что, как и в моих заголовках, я получаю сообщение об ошибке "объект не является экземпляром объявления класса". Есть идеи? Спасибо!

Main.java

Class<?> base = Class.forName("server.functions.TestFunction");
Method serverMethod = base.getMethod("execute", HashMap.class);
serverMethod.invoke(base, new HashMap<String, String>());

TestFunction.java

package server.functions;

import java.util.HashMap;
import java.util.Map;

import server.*;

public class TestFunction extends ServerBase {

    public String execute(HashMap<String, String> params)
    {
        return "Test function successfully called";
    }
}
4b9b3361

Ответ 1

Вы вызываете метод с классом, но вам нужен его экземпляр. Попробуйте следующее:

serverMethod.invoke(base.newInstance(), new HashMap<String, String>());

Ответ 2

Вы пытаетесь вызвать метод execute для объекта base, который на самом деле является объектом Class, возвращаемым вашим вызовом Class.forName().

Это будет работать только для метода static (class), но execute - это нестатический (экземпляр) метод.

Вам нужен фактический экземпляр TestFunction для вызова метода, или вам нужно сделать метод static.

Хотя ваш метод текущего примера будет делать то же самое для любого объекта TestFunction, в общем случае метод экземпляра может дать другой результат для каждого объекта, поэтому метод отражения .invoke() должен знать, какой объект запускать метод на.