Java Annotation Processor:检查TypeMirror是否实现特定的通用接口

时间:2017-11-29 13:27:31

标签: java generics annotations annotation-processing

我正在编写注释处理器,我需要检查特定TypeMirror是否实现了特定的接口。 问题Java Annotations Processor: Check if TypeMirror implements specific interface为非通用接口提供了答案。 但它对通用接口不起作用,例如String正在实现Comparable<String> - 并且使用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

我认为,原因是,那个可比的&#39; TypeElement是使用String作为通用参数定义的,但我不知道如何绕过它。

1 个答案:

答案 0 :(得分:1)

Elements.getTypeElement返回实际类型Comparable<T>String不能Comparable<T> Comparable<String>,但可以ComparableTypes.ensure(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 擦除泛型类型。

return