0

我正在开发一个插件,使用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 ...}");
4

1 回答 1

0

解决方案是将 JConditional nullCheck 替换为以下内容:

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

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

于 2016-08-10T10:37:36.133 回答