1

我想使用 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);
}

注意括号不见了。如何强制括号出现在代码中?

4

1 回答 1

1

不幸的是,我无法找到一种预先存在的添加括号的方法。但是,您可以通过添加特殊的 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);
于 2014-09-30T16:50:59.827 回答