gpt4 book ai didi

java - java 1.6 注解处理时获取实际类型而不是类型参数

转载 作者:行者123 更新时间:2023-11-30 09:50:18 26 4
gpt4 key购买 nike

给定这两个类

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 是一个元素。 (我的类(class))

fieldType 设置为 Key<Foo_> .

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

最佳答案

foo 的类型是Foo_就像在代码中一样。我认为而不是 Key<MyClass>你是说 Key<Cow>因为那是那里使用的类型参数。使用 Types实用程序,您可以获得从子类 MyClass 中看到的字段类型通过使用方法 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>

关于java - java 1.6 注解处理时获取实际类型而不是类型参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5228912/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com