У меня есть десятки функций, которые являются альтернативами друг другу. Они берут ввод и возвращают выход, но в каждом случае вывод немного отличается. Все они встроены в один класс-оболочку.Динамически вызывающие нестатические методы
Я хочу вызвать их, передав имя метода как строку. Я хотел бы также, чтобы избежать вручную поддерживать огромный список невостребованных если заявления:
if(methodName.equals("method1")
return method1(argument);
...
else if(methodName.equals("method176")
return method176(argument);
До сих пор я понял, как динамически вызывать методы, но только если методы являются статическими:
try {
method = MyMainClass.class.getDeclaredMethod(methodName, MyArgumentClass.class);
ResultClass result = (ResultClass)method.invoke(null, myArgument);
return result;
}
catch(Exception e)
{
e.printStackTrace();
System.exit(1);
return null;
}
Возможно ли это для нестатических методов и вызывать функции экземпляров класса вместо статического класса?
не ответ, но: Имейте в виду, что при использовании отражения технически возможно, это, вероятно, не является хорошей идеей. Вы теряете проверку типа компиляции, анализ кода (например, иерархии вызовов в среде IDE) усложняется, и переименование методов требует изменения строк. Я бы посоветовал вам рассмотреть альтернативные методы, такие как шаблон стратегии, или уменьшить количество методов и параметризовать их. – sleske