私には数多くの機能があり、互いの選択肢があります。彼らは入力を取り、出力を返しますが、どちらの場合も出力は少し異なります。それらはすべて単一のラッパークラスに組み込まれています。非静的メソッドを動的に呼び出す
メソッド名を文字列として渡して呼び出したいと思います。私はまた、if文、手動で不要の膨大なリストを維持避けたい:
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