Java JCodeModel与elseif
我正在使用JCodeModel生成Java源代码,并希望得到一个“if-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”。语义上是一样的,我知道,但我需要像前面所示生成它(它是教育软件的一部分
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:当然,您可以始终使用反射
作为解决方法,手动将对象的括号切换为假