JExpression 在 if 语句中将字符串值添加为 属性

JExpression add String value as property in an if statement

我正在开发一个插件来在我的项目中创建 toString 语句,使用 CodeModel

生成的代码应如下所示:

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

(上面代码中的out是一个简单的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 ...}");

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

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

JExpr.direct(属性) 而不是 .lit 导致在此 JConditional 中使用变量而不是 "variable"。