Java 8u45中的方法注释问题

时间:2015-04-20 10:20:17

标签: java annotations

我有以下情况。

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface ExampleAnnotation {}

public abstract class AbstractExample<T extends BeanInterface> {
    public abstract void exampleMethod(T bean);
}

public class ImplementationExample extends AbstractExample<BeanImplementation>{
  @Override
  @ExampleAnnotation
  public void exampleMethod(BeanImplementation bean) {          
  }
}

其中BeanImplementation是BeanInterface的实现。

如果我使用Java 8u45编译代码,并使用以下代码列出ImplementationExample类的哪些方法具有注释ExampleAnnotation

    Class<ImplementationExample> cls = ImplementationExample.class;
    List<Method> methods = new ArrayList<Method>();
    methods.addAll(Arrays.asList(cls.getDeclaredMethods()));

    for (Method method : methods) {
      System.out.println("method: " + method.getName() + " annotation: " + method.getAnnotation(ExampleAnnotation.class));
    }

然后我得到了这两种方法:

ImplementationExample.exampleMethod(BeanImplementation)
ImplementationExample.exampleMethod(BeanInterface)

如果我使用Java 7或Java 8 Eclipse编译器,那么只注释第一个方法,这应该是正确的行为。

这是java 8编译器中的错误吗?或者我做错了什么?

0 个答案:

没有答案