Java JCodeModel与elseif

Java JCodeModel与elseif,java,code-generation,sun-codemodel,Java,Code Generation,Sun Codemodel,我正在使用JCodeModel生成Java源代码,并希望得到一个“if-elseif”块,如下所示: if (foo){ } else if (bar) { } 据我所知,相应的代码如下(其中m是JMethod): 看起来很直截了当,但结果是: if (foo) { } else { if (bar) { } } 你看语法上的区别,它实际上不是一个“elseif”。语义上是一样的,我知道,但我需要像前面所示生成它(它是教育软件的一部分

我正在使用JCodeModel生成Java源代码,并希望得到一个“if-elseif”块,如下所示:

 if (foo){

 } else if (bar) {

 }
据我所知,相应的代码如下(其中m是JMethod):

看起来很直截了当,但结果是:

if (foo) {
    } else {
        if (bar) {
        }
    }

你看语法上的区别,它实际上不是一个“elseif”。语义上是一样的,我知道,但我需要像前面所示生成它(它是教育软件的一部分)。有什么方法可以做到这一点吗?

不幸的是,您无法使用
JConditional
实现这一点。请查看该方法的来源
\u elseif

 public JConditional _elseif(JExpression boolExp) {
     return _else()._if(boolExp);
 }
如您所见,此方法只需在内部调用
\u else()
,然后调用
\u if

实际上
\u else()
JBlock
,默认情况下它包含
大括号(
{…}
)。
JBlock
的此属性可以手动关闭,因为它不包含这样的setter<代码>大括号
只能通过
JBlock
的特殊构造函数关闭:

 public JBlock(boolean bracesRequired, boolean indentRequired) {
     this.bracesRequired = bracesRequired;
     this.indentRequired = indentRequired;
 }
但您无法将自己的对象设置为
\u else
字段的
JConditional
对象

唯一的方法是复制
JConditional
类实现并生成自己的,这将允许您进行此类代码操作


UPD:当然,您可以始终使用
反射
作为手动将
\u其他
对象所需的标志
括号切换到
的变通方法。不幸的是,您无法使用
JConditional
执行此操作。请查看该方法的来源
\u elseif

 public JConditional _elseif(JExpression boolExp) {
     return _else()._if(boolExp);
 }
如您所见,此方法只需在内部调用
\u else()
,然后调用
\u if

实际上
\u else()
JBlock
,默认情况下它包含
大括号(
{…}
)。
JBlock
的此属性可以手动关闭,因为它不包含这样的setter<代码>大括号
只能通过
JBlock
的特殊构造函数关闭:

 public JBlock(boolean bracesRequired, boolean indentRequired) {
     this.bracesRequired = bracesRequired;
     this.indentRequired = indentRequired;
 }
但您无法将自己的对象设置为
\u else
字段的
JConditional
对象

唯一的方法是复制
JConditional
类实现并生成自己的,这将允许您进行此类代码操作

UPD:当然,您可以始终使用
反射
作为解决方法,手动将
对象的
括号
切换为