私に整数を与えるアルゴリズムがあります。 このIntegerに基づいて、メソッドを呼び出したいと思います。 すべての整数は一意であり(データベース内の主キーのような)、呼び出す方法は1つあります。すべてのメソッドは同じデータ型を返します。メソッドはすべて同じクラスにあり、このクラスで呼び出されます。キーで特定のメソッドを呼び出す最も効率的な方法|| refactorメソッド呼び出しswitch文
検索の時間がたってから、私はこの2つのソリューションしか得られませんが、どちらが「より良い」か分かりません。 (運転時間、リソース)
スイッチソリューション: 最初のアイデアではなく
switch (code) {
case 1:
nextOperation = doMethod1();
break;
case 2:
nextOperation = doMethod2();
break;
//many more cases...
default:
break;
}
public MyObject doMethod1(MyObject myObject){
//do something with operation
return myObject;
}
反射ソリューションは非常に良い感じている:多分悪い走行時間
try{
String methodName = "doMethod" + Integer.toString(operation.getOperationCode());
//operation.getOperationCode() same like code in switch solution
Method method = this.class.getDeclaredMethod(methodName, parametertype);
nextOperation = (MyObject) method.invoke(this, parameter);
}
catch (Exception e){
LogReport.writeLog(e.toString()); //own Log-Report filewriter
}
は多分あります(?)私の問題や他の解決策の良い方法? 私に少しヒントを与えることができれば、私はとてもうれしいでしょう。
他の大きな問題は、静的解析を傷つけることです。 'doMethod1'が呼び出される場所をIDEに表示するように頼むことはできません。 – yshavit
これらの2つの方法は異なります。最初のメソッドでは 'this 'のメソッドを呼び出し、2番目のメソッドでは' nextOperation'でメソッドを呼び出します。第2のものも 'nextOperation'の値を変更しません。 – Bubletan
コードは連続していますか?次に、 'MethodHandle'sまたはメソッドを呼び出すいくつかの関数の配列(場合によっては変更不可能なリスト)を使うことができます。 – Bubletan