鉴于这两个类
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是一个ProcessingEnvironment。 entityElement是一个元素。 (MyClass的)
fieldType设置为Key<Foo_>
。
我需要调用什么来将fieldType设置为Key<MyClass>
?
答案 0 :(得分:2)
foo
的类型是Foo_
,就像在代码中一样。我认为代替Key<MyClass>
你的意思是Key<Cow>
,因为那是在那里使用的类型参数。使用Types实用程序,您可以使用方法getDeclaredType
MyClass
中看到字段的类型。
// 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>