【发布时间】:2017-11-29 13:27:31
【问题描述】:
我正在编写注释处理器,我需要检查特定的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
我认为,原因是“可比”TypeElement 是用 String 作为泛型参数定义的,但我不知道如何绕过它。
【问题讨论】:
-
你没有定义
tm。提供可以编译和运行的完整文件(而不是 sn-ps)将帮助其他人了解您的问题并为您提供帮助。 -
tm 是 String 的 TypeMirror,已添加。
标签: java generics annotations annotation-processing