重构:当访问者模式不能用于替换switch / instanceof时

时间:2016-01-28 23:31:58

标签: java design-patterns refactoring visitor

我正在尝试使用instanceof对一段代码进行一些重构,以确定类型。我认为在这种情况下,子类型/多态不会起作用(即使在这种情况下它太过分了)并且访问者模式在这里不起作用,因为我没有可能在这里添加一个接受方法注解。还有其他方法可以使这种代码更清晰/更易读吗?

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() {
...
      }
}

1 个答案:

答案 0 :(得分:0)

DELETE delete = method.getAnnotation(DELETE.class);
if (delete != null) {
    ...
}
GET get = method.getAnnotation(GET.class);
if (get != null) {
    ...
}