方法调用中省略了通用类型

时间:2019-06-03 09:29:12

标签: java generics annotations

我有一个带有接口方法的接口

<A extends Annotation> A getAnnotation(Class<A> annotationType)

该类的实现通过包装实现该方法

javax.lang.model.element.Element.getAnnotation(...)

具有完全相同的界面。 当我现在尝试调用自己的实现时,出现错误incompatible types: java.lang.annotation.Annotation cannot be converted to myannotation

请记住,getElement()函数是为了测试而添加的,不应保留

界面:

public interface ElementWrapper<E extends Element> {
  <A extends Annotation> A getAnnotation(Class<A> annotationType);
  E getElement();
}

实现:

public class TypeWrapper implements ElementWrapper<TypeElement> {
  private static final TypeElement element;

  @Override
  public final <A extends Annotation> A getAnnotation(Class<A> annotationType) {
    return element.getAnnotation(annotationType);
  }

  @Override
  public final TypeElement getElement() {
    return element;
  }
}

问题的用法:

public class TheClassIUseTypeWrapperIn {
  public someMethod(TypeWrapper wrapper) {
    MyAnnotation = wrapper.getElement().getAnnotation(MyAnnotation.class); // this works fine
    MyAnnotation = wrapper.getAnnotation(MyAnnotation.class); // this does not work
  }
}

我希望我的包装器能正常工作

0 个答案:

没有答案