Прежде всего, рассмотрите мой комментарий о том, что ваше представление о динамическом поведении кнопок, разрешенном из строк, является неправильным подходом. Однако, если вам все еще нужно именно то, что вы просили, вам понадобится Reflection API .
Вот пример:
Class c = SomeClassWithMethods.class;
Method m = c.getMethod("someMethodName", String.class, Integer.class, Integer.TYPE);
m.invoke(baseObjectFromWhichToCallTheMethod, "stringParam", 10, 5);
Добавлено:
Другой вариант, который немного красивее, чем отражение, но все еще грязный дизайн, - это использовать карту, чтобы связать эти Strings
с методами. Код немного длиннее, но с точки зрения Java это намного лучше, чем использование отражения для вашей задачи (если у вас нет особых требований, о которых я не знаю). Вот как это будет работать:
//Interface whose instances will bind strings to methods
interface ButtonClickHandler {
void onClick();
}
class SomeClassYouNeed {
//One of the methods that will be bound to "onButtonOneClick()"
public void onButtonOneClick() {
log.info("ButtonOneClick method is called");
}
public void onButtonTwoClick() {
log.info("ButtonTwoClick method is called");
}
//Map that will hold your links
private static Map<String, ButtonClickHandler> buttonActionMap;
//Static constructor to initialize the map
static {
buttonActionMap = new Map<String, ButtonClickHandler>();
buttonActionMap.put("onButtonOneClick()",new ButtonClickHandler() {
@Override
public void onClick() {
onButtonOneClick();
}
});
buttonActionMap.put("onButtonTwoClick()",new ButtonClickHandler() {
@Override
public void onClick() {
onButtonTwoClick();
}
});
}
public void callByName(String methodName) {
final ButtonClickHandler handler = buttonActionMap.get(methodName);
if (handler == null) {
throw new IllegalArgumentException("No handler found by name: "+methodName);
}
handler.onClick();
}
}
После того, как вы вызовете callByName("onButtonTwoClick()")
, он извлечет соответствующий экземпляр ButtonClickHandler
, который будет использовать статический метод onButtonTwoClick()
для обработки нажатия кнопки.