変数に一般的な文字列が格納されていてString func = "validate";
、その名前の関数を呼び出したい、つまり、validate()
関数を呼び出す必要があります。
私は、変数を何らかの関数に渡すと言うつもりな
public void callFunc(String func){
....
}
ので、上記の関数は、関数名がcallfunc()
.
7461 次
2 に答える
15
これを行うには、リフレクションを使用できます。例:
Method method = getClass().getMethod(func);
// TODO: Validation
method.invoke(this);
もちろん、でメソッドを呼び出したいと仮定しthis
、それがインスタンスメソッドであると仮定します。Class.getMethod
詳細については、関連するメソッドとMethod
それ自体を参照してください。getDeclaredMethod
代わりに必要な場合があり、アクセス可能にする必要がある場合があります。
可能であれば、これを回避する方法を考えられるかどうかを確認します。ただし、反射はすぐに乱雑になる傾向があります。一歩下がって、これが最良の設計であるかどうかを検討する価値があります。全体像の詳細を教えていただければ、代替案を提案できる可能性があります。
于 2012-05-09T06:19:30.457 に答える
0
反射を使用する別の方法があります。次のようなパターン マッチングを記述できます。
switch (func) {
case "validate": validate(); break;
case "apply": apply(); break;
default: break;
}
しかし、私はジョンに同意します:これを避けるようにしてください. パターン マッチングを使用する場合は、変更を 2 回適用する必要があります。たとえば、別のメソッドを追加する場合は、関数の名前付けメソッドとパターン マッチングに追加する必要があります。
于 2012-05-09T06:41:22.693 に答える