Java 如何强制将CodeModel表达式括在括号中?
我想使用Sun的代码模型生成一些非常常见的代码Java 如何强制将CodeModel表达式括在括号中?,java,sun-codemodel,jcodemodel,Java,Sun Codemodel,Jcodemodel,我想使用Sun的代码模型生成一些非常常见的代码 while ((sbt = reader.readLine()) != null) { } 然而,当我写作时: JWhileLoop whileJsonBuilder = block._while(JExpr .ref("partJsonString").assign(JExpr.ref("reader")) .ne(JExpr._n
while ((sbt = reader.readLine()) != null)
{
}
然而,当我写作时:
JWhileLoop whileJsonBuilder = block._while(JExpr
.ref("partJsonString").assign(JExpr.ref("reader"))
.ne(JExpr._null()));
我明白了
请注意,缺少括号。
如何强制括号出现在代码中?不幸的是,我无法找到一种预先存在的方法来添加括号。但是,您可以通过添加一个特殊的JExpression来渲染副焓值,从而扩展JCodeModel以处理此问题:
public class ParensExpession extends JExpressionImpl{
private JExpression expression;
public ParensExpession(JExpression expression) {
this.expression = expression;
}
@Override
public void generate(JFormatter formatter) {
formatter.p('(').g(expression).p(')');
}
}
纳入您的代码中:
JWhileLoop whileJsonBuilder = block._while(
new ParensExpession(
JExpr.ref("partJsonString").assign(JExpr.ref("reader"))
).ne(JExpr._null()));
给出:
while ((partJsonString = reader)!= null);
(;){String sbt=reader.readLine();if(sbt==null)break;…}在CodeModel中是可行的。没有理由喜欢这种款式,相反,这种款式更好。是的,谢谢。但我认为在codeModel中有一种方法可以实现,毕竟它是由Sun编写的。例如,似乎只有assign语句的一个子集。我也很快地寻找逗号表达法——但没有用。
while ((partJsonString = reader)!= null);