作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用注释处理和 javapoet 库来生成一些源代码。
说,我有
VariableElement fieldElement
而如果
System.out.println("type:- " + fieldElement.asType().toString());
打印
type:- java.util.Set<com.example.demo.test.model.User>
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/
我是一名优秀的程序员,十分优秀!