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;
}
Но я согласен с Джоном: постарайся избежать этого. Если вы используете сопоставление с образцом, вы должны применить изменения дважды. Например, если вы добавляете другой метод, вам нужно добавить его в метод именования функций и сопоставление с шаблоном.