簡體   English   中英

如何強制將CodeModel表達式括在方括號中?

[英]How do I force-enclose a CodeModel expression in brackets?

我想使用Sun的CodeModel生成一些非常常見的代碼

while ((sbt = reader.readLine()) != null)
{

}

但是當我寫:

JWhileLoop whileJsonBuilder = block._while(JExpr
                            .ref("partJsonString").assign(JExpr.ref("reader"))
                            .ne(JExpr._null()));

我懂了

while (partJsonString = reader!= null) {
    stringBuilder.append(partJsonString);
}

請注意,缺少括號。 如何強迫方括號出現在代碼中?

不幸的是,我找不到添加括號的既有方法。 但是,您可以通過添加特殊的JExpression來呈現寄生狀態,從而擴展JCodeModel來處理此問題:

public class ParensExpession extends JExpressionImpl{

    private JExpression expression;

    public ParensExpession(JExpression expression) {
        this.expression = expression;
    }

    @Override
    public void generate(JFormatter formatter) {
        formatter.p('(').g(expression).p(')');
    }
}

合並到您的代碼中:

JWhileLoop whileJsonBuilder = block._while(
    new ParensExpession(
        JExpr.ref("partJsonString").assign(JExpr.ref("reader"))
    ).ne(JExpr._null()));

得到:

while ((partJsonString = reader)!= null);

暫無
暫無

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

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