Java getMethod с параметром подкласса
Я пишу библиотеку, которая использует отражение для динамического поиска и вызова методов. Учитывая только объект, имя метода и список параметров, мне нужно вызвать данный метод, как если бы вызов метода был явно записан в коде.
Мы использовали следующий подход, который работает в большинстве случаев:
static void callMethod(Object receiver, String methodName, Object[] params) {
Class[] paramTypes = new Class[params.length];
for (int i = 0; i < param.length; i++) {
paramTypes[i] = params[i].getClass();
}
receiver.getClass().getMethod(methodName, paramTypes).invoke(receiver, params);
}
Однако когда один из параметров являетсяподкласс одного из поддерживаемых типов для метода, API отражения выдаетNoSuchMethodException
, Например, если получателькласс имеетtestMethod(Foo)
определено следующее:
receiver.getClass().getMethod("testMethod", FooSubclass.class).invoke(receiver, new FooSubclass());
хотя это работает:
receiver.testMethod(new FooSubclass());
Как мне решить это? Если вызов метода там жестко запрограммированНет проблем - компилятор просто использует алгоритм перегрузки, чтобы выбрать наиболее подходящий метод для использования. Это неОднако, я работаю с отражением, а это то, что мне нужно.
Заранее спасибо!