从TypeElement获取Super Class而不使用Generic?

时间:2015-04-28 13:35:18

标签: java annotations annotation-processing

我有一个班级:

public class StartPagePresenter extends AbstractPresenter<String> {
...
}

使用Java注释处理我得到了类的TypeElement

TypeElement startPagePresenterType = // get the TypeElement of StartPagePresenter

现在我需要获得完成的超类:

startPagePresenterType.getSuperclass();

然后我尝试检查超类是否具有正确的类型:

if ( !startPagePresenterType.getSuperclass().toString().equals(
     AbstractPresenter.class.getCanonicalName()) ) {
 ...
}

问题在于:AbstractPresenter.class.getCanonicalName()导致:

core.mvp.AbstractPresenter

startPagePresenterType.getSuperclass().toString()导致:

core.mvp.AbstractPresenter<java.lang.String>

当你比较这些字符串时,它们永远不会相等,尽管超类是相同的。

如何在没有通用块的情况下从startPagePresenterType.getSuperclass()获取超类?

1 个答案:

答案 0 :(得分:8)

我找到了答案:

TypeMirror superClassTypeMirror = startPagePresenterType.getSuperclass();
TypeElement superClassTypeElement = 
            (TypeElement)((DeclaredType)superClassTypeMirror).asElement();

那就是它! superClassTypeElement然后是超类的TypeElement