Я пытаюсь выполнить рефакторинг фрагмента кода, используя instanceof, чтобы определить тип. Я думаю, что подтип/полиморфизм в этом случае не сработает (и даже если это будет слишком много в этой ситуации), и шаблон посетителя здесь не сработает, поскольку у меня нет возможности добавить метод accept в аннотация. Есть ли другие способы сделать такой код более чистым/читабельным?
for (Annotation annotation : method.getAnnotations()) {
if (annotation instanceof DELETE) {
setHttpMethod(annotation.annotationType().getSimpleName(), false);
parsePath(((DELETE) annotation).value());
} else if (annotation instanceof GET) {
setHttpMethod(annotation.annotationType().getSimpleName(), false);
parsePath(((GET) annotation).value());....
DELETE и GET выглядят так
public @interface DELETE {
String value() default "";
}
public @interface GET {
String value() default "";
}
Пример использования:
class Example {
@DELETE("value")
Response method() {
...
}
}
DELETE
, что такоеGET
, есть ли аннотации, которые не следует учитывать, и т. д.? - person Marvin   schedule 29.01.2016annotation instanceof DELETE
верно, то((DELETE) annotation)
является избыточным преобразованием. В этом случае внутри блокаif
будет простоsetHttpMethod(annotation.annotationType().getSimpleName(), false); parsePath(annotation.value());
в обоих случаях. Тело когда-нибудь меняется? - person Miserable Variable   schedule 29.01.2016o instanceof String
, вы не можете сделатьo.substring()
. Вам нужно сделать((String) o).substring()
. - person JB Nizet   schedule 29.01.2016value()
, который возвращает правильное значение для любого типа аннотации во время выполнения? Все еще не шаблон посетителя, но код упрощается доif (annotation instanceof HttpVerb) { ...parsePath(((HttpVerb)annotation).value()); }
- person Miserable Variable   schedule 29.01.2016