Java: как вызвать функцию, имя которой хранится в строковой переменной

У меня есть общая строка хранится в переменной String func = "validate"; и я хочу вызвать функцию этого имени, т.е. мне нужно позвонить validate() функция.
Я хочу сказать, что передам переменную в какую-то функцию
public void callFunc(String func){
....
}
Итак, вышеприведенная функция должна вызывать соответствующую функцию с именем функции, передаваемой в качестве параметра callfunc(),

2 ответа

Вы можете использовать отражение, чтобы сделать это, например,

Method method = getClass().getMethod(func);
// TODO: Validation
method.invoke(this);

Это при условии, что вы хотите вызвать метод на this и, конечно, это метод экземпляра. смотреть на Class.getMethod и связанные методы, наряду с Method Сам, для более подробной информации. Вы можете хотеть getDeclaredMethod вместо этого, и вам может понадобиться сделать его доступным.

Я хотел бы узнать, можете ли вы придумать способ избежать этого, если это возможно, хотя рефлексия быстро становится грязной. Стоит сделать шаг назад и подумать, если это лучший дизайн. Если вы дадите нам более подробную информацию о более широкой картине, мы можем предложить альтернативные варианты.

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

switch (func) {
  case "validate": validate(); break;
  case "apply": apply(); break;
  default: break;
}

Но я согласен с Джоном: постарайся избежать этого. Если вы используете сопоставление с образцом, вы должны применить изменения дважды. Например, если вы добавляете другой метод, вам нужно добавить его в метод именования функций и сопоставление с шаблоном.

Другие вопросы по тегам