JExpression将String值添加为if语句中的属性

时间:2016-08-10 08:15:45

标签: java plugins sun-codemodel

我正在使用CodeModel在我的项目中创建toString语句的插件。

生成的代码应如下所示:

if (variable == null) { 
    out.append("   " + "variable = null").append("\n"); 
}

(在上面的代码中是一个简单的StringBuilder)

我想使用CodeModel在if语句中自动生成新行和制表符,并且到目前为止已达到此输出:

if ("variable" == null) { 
    out.append("   " + "variable = null").append("\n"); 
}

问题是变量周围的引号,我为变量值指定了一个JExpression文字值。目前的实施如下:

    private void printComplexObject(final JMethod toStringMethod, FieldOutline fo) {
        String property = fo.getPropertyInfo().getName(false);
        property = property.replace("\"", "");

        JType type = fo.getRawType();
        JBlock block = toStringMethod.body();
        JConditional nullCheck = block._if(JExpr.lit(property).eq(JExpr._null())); ...}

是否有人知道如何使用JExpression或CodeModel中的任何其他内容来完成此操作?到目前为止,唯一的替代方法是使用directStatement进行如下操作:

toStringMethod.body().directStatement("if (" + property + " == null) { out.append ...}");

1 个答案:

答案 0 :(得分:0)

解决方案是使用以下内容替换JConditional nullCheck:

JConditional nullCheck = block._if(JExpr.direct(property).eq(JExpr._null()));

JExpr.direct(property)而不是.lit导致在此JConditional中使用变量而不是“variable”。