У меня есть алгоритм, который дает мне Integer. Основываясь на этом Integer, я хочу вызвать метод. Каждый Integer уникален (как первичный ключ в базе данных) и имеет 1 метод для вызова. Каждый метод возвращает один и тот же тип данных. Все методы находятся в одном классе и вызываются в этом классе.наиболее эффективный способ вызова определенного метода ключом || refactor method вызывающий оператор 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
}
Является ли там может быть (?) лучший способ для моей проблемы или других решений? Если вы можете дать мне небольшой намек, я был бы очень рад.
Другая большая проблема с отражением заключается в том, что это повредит статическому анализу. Вы не сможете попросить свою среду IDE показать вам все места, где вызывается 'doMethod1'. – yshavit
Эти два способа отличаются. В первом вы вызываете методы на 'this', а во втором вы вызываете их на' nextOperation'. Второй также не меняет значение 'nextOperation'. – Bubletan
Являются ли коды последовательными? Затем вы можете просто использовать массив (или, возможно, немодифицируемый список) либо 'MethodHandle', либо некоторые функции, вызывающие методы. – Bubletan