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

con*_*ile 3 java annotations annotation-processing

我有一节课:

public class StartPagePresenter extends AbstractPresenter<String> {
...
}
Run Code Online (Sandbox Code Playgroud)

使用Java Annotation Processing我得到TypeElement了类:

TypeElement startPagePresenterType = // get the TypeElement of StartPagePresenter
Run Code Online (Sandbox Code Playgroud)

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

startPagePresenterType.getSuperclass();
Run Code Online (Sandbox Code Playgroud)

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

if ( !startPagePresenterType.getSuperclass().toString().equals(
     AbstractPresenter.class.getCanonicalName()) ) {
 ...
}
Run Code Online (Sandbox Code Playgroud)

这是问题所在:AbstractPresenter.class.getCanonicalName()导致:

core.mvp.AbstractPresenter
Run Code Online (Sandbox Code Playgroud)

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

core.mvp.AbstractPresenter<java.lang.String>
Run Code Online (Sandbox Code Playgroud)

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

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

con*_*ile 8

我找到了答案:

TypeMirror superClassTypeMirror = startPagePresenterType.getSuperclass();
TypeElement superClassTypeElement = 
            (TypeElement)((DeclaredType)superClassTypeMirror).asElement();
Run Code Online (Sandbox Code Playgroud)

而已!superClassTypeElement然后是TypeElement超级班.