2

注釈処理と javapoet ライブラリを使用して、ソース コードを生成しています。

言う、私は

VariableElement fieldElement

で、もし

System.out.println("type:- " + fieldElement.asType().toString());

版画

タイプ:- 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);

いくつかの文字列比較は仕事を成し遂げるでしょうが、理想的なアプローチとは思えません。

4

1 に答える 1

2

以下のコードを試すことができます。

使用できる User クラスを取得するfieldElement.getEnclosingElement()には、クラス名と完全なパッケージ名を指定します。

そのクラスの名前だけが必要な場合は、 を使用できますenclosingElement.getSimpleName()

また、closedByElement を取得するには、 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

この 2 つの値を取得するための Utility メソッドを 1 つ作成することもできます。

これはあなたを助けるでしょう。

于 2020-08-16T16:38:18.800 に答える