Java 如何强制将CodeModel表达式括在括号中?

Java 如何强制将CodeModel表达式括在括号中?,java,sun-codemodel,jcodemodel,Java,Sun Codemodel,Jcodemodel,我想使用Sun的代码模型生成一些非常常见的代码 while ((sbt = reader.readLine()) != null) { } 然而,当我写作时: JWhileLoop whileJsonBuilder = block._while(JExpr .ref("partJsonString").assign(JExpr.ref("reader")) .ne(JExpr._n

我想使用Sun的代码模型生成一些非常常见的代码

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

}
然而,当我写作时:

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

请注意,缺少括号。
如何强制括号出现在代码中?

不幸的是,我无法找到一种预先存在的方法来添加括号。但是,您可以通过添加一个特殊的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);

(;){String sbt=reader.readLine();if(sbt==null)break;…}在CodeModel中是可行的。没有理由喜欢这种款式,相反,这种款式更好。是的,谢谢。但我认为在codeModel中有一种方法可以实现,毕竟它是由Sun编写的。例如,似乎只有assign语句的一个子集。我也很快地寻找逗号表达法——但没有用。
while ((partJsonString = reader)!= null);