gpt4 book ai didi

java - 如何从 javax.lang.model.VariableElement 获取类型和泛型类型?

转载 作者:行者123 更新时间:2023-12-04 09:06:19 25 4
gpt4 key购买 nike

我正在使用注释处理和 javapoet 库来生成一些源代码。
说,我有

VariableElement fieldElement
而如果
System.out.println("type:- " + fieldElement.asType().toString());
打印

type:- java.util.Set<com.example.demo.test.model.User>


我如何获得 Set 类和 User 类,以便我可以用 javapoet 做这样的事情?
ClassName user = ClassName.get("com.example.demo.test.model", "User");
ClassName set = ClassName.get("java.util", "Set");
TypeName setOfUsers = ParameterizedTypeName.get(set, user);
一些字符串比较可以完成工作,但似乎不是理想的方法。

最佳答案

你可以试试下面的代码。
要获得该 User 类,您可以使用 fieldElement.getEnclosingElement() ,它将为您提供带有完整包名称的类名。
现在,如果您只想要该类的名称,您可以使用 enclosingElement.getSimpleName() .
要获得封闭的元素,您可以使用 TypeSymbol . 简单地将 fieldElement.asType() 转换为 Type 并获得 tsym 属性。

        VariableElement fieldElement;

Symbol.TypeSymbol containerForEnclosingElement=((Type)fieldElement.asType()).tsym;
Element enclosingElement=fieldElement.getEnclosingElement();

System.out.println("containerForEnclosingElement:- " + containerForEnclosingElement);
System.out.println("enclosingElement:- " + enclosingElement);
System.out.println("enclosingElement Name:- " + enclosingElement.getSimpleName());
System.out.println("fieldElement without root Type:- "+((Type) fieldElement.asType()).getTypeArguments().get(0));
上面的代码将打印输出如下。
containerForEnclosingElement:- java.util.Set
enclosingElement:- com.example.demo.test.model.User.
enclosingElement Name:- User
fieldElement without root Type:- com.example.demo.test.model.User
您还可以创建一个 Utility 方法来获取这两个值。
这会帮助你。

关于java - 如何从 javax.lang.model.VariableElement 获取类型和泛型类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63437899/

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