如何使用CodeModel的JExpr.plus方法删除不必要的括号?

时间:2012-10-18 18:55:13

标签: java sun-codemodel

我正在使用JExpr.plus()方法来形成一个String,从语法上讲它是正确的,但它有很多括号。例如:

JExpr.lit("ONE").plus(JExpr.lit("TWO")).plus(JExpr.lit("THREE"))

返回

(("ONE" + "TWO") + "THREE")

我希望它是

"ONE" + "TWO" + "THREE"

1 个答案:

答案 0 :(得分:1)

现在看起来像codemodel你不能避免添加括号。 Plus(+)被认为是BinaryOp,它使用以下类生成其代码:

com.sun.codemodel.JOp内:

static private class BinaryOp extends JExpressionImpl {

    String op;
    JExpression left;
    JGenerable right;

    BinaryOp(String op, JExpression left, JGenerable right) {
        this.left = left;
        this.op = op;
        this.right = right;
    }

    public void generate(JFormatter f) {
        f.p('(').g(left).p(op).g(right).p(')');
    }

}

注意f.p('(').p(')')。括号的添加被包含在代码中,无法避免。话虽如此,你可以改变代码模型来做你需要的东西,因为它是开源的。就个人而言,我认为没有必要,因为括号在其他情况下是有用的。