Java注释处理器:检查TypeMirror是否实现特定的通用接口

Java注释处理器:检查TypeMirror是否实现特定的通用接口,java,generics,annotations,annotation-processing,Java,Generics,Annotations,Annotation Processing,我正在编写注释处理器,我需要检查特定的TypeMirror是否实现了特定的接口。 该问题为非通用接口提供了答案。 但是它不适用于通用接口,例如,String正在实现Comparable——并且使用isAssignable的代码不起作用 此代码按预期工作: TypeMirror tm = elementUtil.getTypeElement("java.lang.String").asType(); TypeMirror serializable = elementUtil.getTypeElem

我正在编写注释处理器,我需要检查特定的
TypeMirror
是否实现了特定的接口。 该问题为非通用接口提供了答案。 但是它不适用于通用接口,例如,
String
正在实现
Comparable
——并且使用isAssignable的代码不起作用

此代码按预期工作:

TypeMirror tm = elementUtil.getTypeElement("java.lang.String").asType();
TypeMirror serializable = elementUtil.getTypeElement("java.io.Serializable").asType();
boolean isSerializable = typeUtil.isAssignable(tm, serializable);
//here isSerializable is true
但该代码不:

TypeMirror tm = elementUtil.getTypeElement("java.lang.String").asType();
TypeMirror comparable = elementUtil.getTypeElement("java.lang.Comparable").asType();
boolean isComparable = typeUtil.isAssignable(tm, comparable);
//here isComparable is false

我认为,原因是,“comparable”TypeElement是用字符串作为泛型参数定义的,但我不知道如何绕过它。

元素。getTypeElement
返回实际的类型
comparable
<代码>字符串不可分配给
可比
,但可分配给
可比
可比
。因此,最简单的方法是通过
类型擦除泛型类型。确保(TypeMirror)


您没有定义
tm
。提供可以编译和运行的完整文件(而不是代码片段)将有助于其他人理解您的问题并帮助您。tm是字符串的TypeMirror,他补充道。
TypeMirror tm = elements.getTypeElement("java.lang.String").asType();
TypeMirror comparable = types.erasure(elements.getTypeElement("java.lang.Comparable").asType());
boolean isComparable = types.isAssignable(tm, comparable); // return true