问题描述
VariableElement fieldElement
如果
System.out.println("type:- " + fieldElement.asType().toString());
打印
类型:-java.util.Set
如何获取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);
一些字符串比较可以完成工作,但似乎不是理想的方法。
解决方法
您可以尝试以下代码。
要获取该用户类,您可以使用 fieldElement.getEnclosingElement()
,它将为您提供包含完整程序包名称的类名称。
现在,如果您只想要该类的名称,则可以使用 enclosingElement.getSimpleName()
。
要获取被包围的元素,您可以使用[JS]。只需将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方法来获取这两个值。
这将为您提供帮助。