Если под «более эффективно» вы подразумеваете «в меньшем количестве строк кода», то почему бы не объединить два оператора if? Единственное различие, которое я вижу между ними, состоит в том, что у одного есть Pre.class
, где у другого - Post.class
, и у вас уже есть удобная ссылка на этот класс в anno var:
for (Method curr : all) {
if (curr.isAnnotationPresent(anno)) {
if (anno == Pre.class || anno == Post.class){
for (String str : curr.getAnnotation(anno).value()){
if (str.equals(method.getName()) && curr.getReturnType() == boolean.class && curr.getParameterTypes().length == 0){
toRun.add(curr);
}
}
}
}
}
Кроме того, нет смысла выполнять внешний цикл for, если anno
не является ни Pre.class
, ни Post.class
, поэтому вы должны делать эту проверку снаружи (это сохраняет итерации по методам, если она вызывается с аннотацией ты не хочешь). Вы также можете переместить проверки для returnType и длины параметра за пределы внутреннего цикла for (это позволит сохранить их повторение для каждого из значений и сохранить итерацию вообще, если они не соответствуют действительности).
if (anno == Pre.class || anno == Post.class){
for (Method curr : all) {
if (curr.isAnnotationPresent(anno) && curr.getReturnType() == boolean.class && curr.getParameterTypes().length == 0) {
for (String str : curr.getAnnotation(anno).value()){
if (str.equals(method.getName())) {
toRun.add(curr);
}
}
}
}
}