3

鉴于这两个类

public class MyClass extends MyAbstractClass<Cow> {
  ...
}

public abstract class MyAbstractClass<Foo_ extends AbstractFoo> {
  ...
  Key<Foo_> foo;
  ...
}

如果我在注释处理器中运行此代码,我不会得到我想要的结果。

for (VariableElement fieldElement : ElementFilter.fieldsIn(env.getElementUtils().getAllMembers((TypeElement)entityElement))) {
    String fieldType = fieldElement.asType().toString();
}

env 是一个处理环境。entityElement 是一个元素。(我的课)

fieldType 设置为Key<Foo_>

我需要调用什么才能将 fieldType 设置为Key<MyClass>

4

1 回答 1

3

的类型与代码中fooFoo_一样。我认为不是Key<MyClass>你的意思Key<Cow>,因为那是那里使用的类型参数。使用TypesMyClass实用程序,您可以使用getDeclaredType方法从子类中获取字段的类型

// these are the types as declared in the source
System.out.println(fieldElement.asType());      // Key<Foo_>
System.out.println(t.getSuperclass());          // MyAbstractClass<Cow>

// extract the type argument of MyAbstractClass
TypeMirror superClassParameter = ((DeclaredType) t.getSuperclass()).getTypeArguments().get(0);
System.out.println(superClassParameter);        // Cow

// use the type argument and the field's type's type element to construct the fields actual type
DeclaredType fieldType = typeUtils.getDeclaredType(
        (TypeElement) typeUtils.asElement(fieldElement.asType()), superClassParameter);

System.out.println(fieldType);                   // Key<Cow>
于 2011-09-01T12:55:30.380 回答