簡體   English   中英

如何在 Java AST 中返回泛型類型

[英]How to return a generic type in Java AST

我正在編寫一個程序來修改 Java 抽象語法樹 (AST),但我不知道如何生成通用返回類型。 誰能幫我?

生成的方法如下所示:

public static List<String> converter() {
     return new ArrayList<String>();
}

我正在使用 com.sun.tools.javac.tree.TreeMaker.MethodDef() 生成方法的 JCTree,如下所示:

return treeMaker.MethodDef(
                modifiers,
                method,
                returnType,
                List.nil(),
                List.nil(),
                List.nil(),
                methodBody,
                null
        );

一切都很好,但問題是“returnType”參數

它是一種 JCExpression 類型,我只能將其設置為“java.util.List”。

如何將其設置為List<String>

似乎沒有人回答我。 我該怎么辦?

TreeMaker.TypeApply(JCExpression, List<JCExpression>)包裝returnType


例如:

JCTree.JCMethodDecl method = treeMaker.MethodDef(
        treeMaker.Modifiers(Flags.PUBLIC | Flags.STATIC),
        names.fromString("getStrings"),
        treeMaker.TypeApply(
                treeMaker.QualIdent((Symbol) elements.getTypeElement("java.util.List")),
                List.of(treeMaker.QualIdent((Symbol) elements.getTypeElement("java.lang.String")))
        ),
        List.nil(),
        List.nil(),
        List.nil(),
        treeMaker.Block(
            0,
            List.of(treeMaker.Return(
                treeMaker.NewClass(
                    null,
                    List.nil(),
                    treeMaker.TypeApply(
                        treeMaker.QualIdent((Symbol) elements.getTypeElement("java.util.List")),
                        List.of(treeMaker.QualIdent((Symbol) elements.getTypeElement("java.lang.String")))
                    ),
                    List.nil(),
                    null
                )
            ))
        ),
        null
    );

會產生這樣的東西:

public static java.util.List<java.lang.String> getStrings() {
    return new java.util.List<java.lang.String>();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM