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"。
我正在开发一个插件来在我的项目中创建 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"。