【发布时间】:2011-10-12 09:48:32
【问题描述】:
当在注解处理器中获取TypeElement 时,您可以使用方法getSuperClass() 请求它的超类(或者更具体地说,它的TypeMirror)。 According to the JavaDoc,一个不明确扩展任何东西的类型(换句话说,Object 是超类)或者是一个接口将返回一个NoType 和NONE 作为TypeKind。
忽略整个模型/镜像 API 似乎在每一个机会都会让您感到困惑的事实,我将如何可靠地检查这一点?以下是一些代码摘录:
//Cast is safe since TypeKind is checked before this
final TypeElement el = (TypeElement)annotatedElement;
...
final TypeMirror parent = el.getSuperclass();
//Checking whether "nothing" is extended
if(parent.getKind().equals(TypeKind.NONE) && parent instanceof NoType) {
...
}
这是正确的方式吗?看起来比较笨重。由于equals method of TypeMirror 不应该用于语义相等性检查,我想知道将它用于TypeKind 是否安全。我的直觉是肯定的,因为它是一个枚举,但后来我对 instanceof 表示怀疑。
有没有更好的方法来做到这一点?整个 javax.lang.model 包及其子包在整个商店都有交叉引用,我永远不清楚什么是最好的方法。有些东西有有用的实用方法,然后有些看似简单的任务需要像上面这样可疑的杂技。
【问题讨论】:
标签: java inheritance mirror annotation-processing