- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在使用 JCodeModel 生成 Java 源代码,并希望获得如下所示的“if-elseif” block :
if (foo){
} else if (bar) {
}
据我了解,相应的代码将是这样的(其中m是一个JMethod):
JConditional cond = m.body()._if(JExpr.direct("foo"));
cond._elseif(JExpr.direct("bar"));
看似简单,但结果是这样的:
if (foo) {
} else {
if (bar) {
}
}
你看到语法差异了,它实际上不是一个“elseif”。我知道,从语义上讲,它是相同的,但我需要如之前所示生成它(它是教育软件的一部分)。有办法做到这一点吗?
最佳答案
遗憾的是,由于其实现原因,您无法使用 JConditional 来执行此操作。看一下方法_elseif
的源码:
public JConditional _elseif(JExpression boolExp) {
return _else()._if(boolExp);
}
如您所见,此方法仅在内部调用 _else()
,然后调用 _if
。
实际上_else()
是JBlock
,默认包含大括号
({ ... }
)。 JBlock
的此属性无法手动关闭,因为它不包含此类 setter 。 大括号
只能通过JBlock
的特殊构造函数关闭:
public JBlock(boolean bracesRequired, boolean indentRequired) {
this.bracesRequired = bracesRequired;
this.indentRequired = indentRequired;
}
但您无法将自己的对象向外设置为 JConditional
对象的 _else
字段。
唯一的方法是复制 JConditional 类实现并生成您自己的类实现,这将允许您进行此类代码操作。
UPD:当然,您始终可以使用 Reflection
作为解决方法,将 _else
对象的标记 bracesRequired
手动切换为 false
。
关于java - JCodeModel 和 elseif,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14315139/
我需要这样的东西 public void method() { //TODO generated sources } 这是我生成一个类和一个方法的方法 JCodeModel cm = new
我正在使用 JCodeModel 生成 java 源代码。我想将版权信息添加到生成的代码中。目前可以吗? 我尝试在 JDefinedClass 中使用 javadoc(),它仅在类定义之上添加信息。
我正在尝试创建一个扩展通用抽象类(MappingObject.class)的类(MoMoTest.class)。一切看起来都不错,除了 JCodeModel 没有导入缩小的类 (MoTest.clas
我正在使用 JCodemodel 动态生成 java 类。下面是创建 switch 语句的代码,其默认情况是抛出异常。 JSwitch valueswitch; AbstractJClass exce
我可以使用 JCodeModel 生成注释类,除了一件事。我不明白如何将其添加到注释中: @Target(value={METHOD,TYPE,CONSTRUCTOR}) 如何将定义值的数组设置为va
我想用可能在语法上无效的代码片段创建 Java 源代码。 com.sun.codemodel.JBlock#directStatement() method 可以做到这一点. 我的问题是,我想修改现有
我正在尝试弄清楚如何使用循环来构建可在 .assign() 调用中使用的 JExpression。我知道您可以使用 JCodeModel 执行类似 JExpr.invoke("methodA").in
我通过 Json 创建一个新的 Java 类,即: { "package" : "crud.vaadin", "className" : "StudentForm", "ext
是否可以使用jcodemodel修改现有的类文件? 如果是的话,能给我一些引用吗? 请回复我需要它。 最佳答案 我也遇到了同样的问题,但找不到解决方案。我现在使用JavaParser反而。它可以加载文
我正在尝试使用 Jcodemodel 生成 Java 代码。 如何使用 Jcodemodel 生成所需的导入语句? 类实现接口(interface)时,如何自动生成接口(interface)方法的实现
我想使用 JCodeModel 创建以下 Java 源代码 public enum MyEnum { FIRST_CONSTANT { @Override pu
我正在使用 JCodeModel 生成 Java 源代码,并希望获得如下所示的“if-elseif” block : if (foo){ } else if (bar) { } 据我了解,相应的
我正在尝试在我的 maven 项目中使用 jcodemodel 生成 java 代码。我的 Maven 项目具有三个模块。我已经在我的模块之一中编写了一个示例 jcodemodel 用于测试目的。但是
我在 JCodeModel 上使用了 JClass.narrow 来为类型创建必要的泛型,但我不知道如何生成这样的东西。 private Class dataType; 如何生成?扩展部分? 欢迎任何
我已经创建了 JCodeModel,其中包含我想要生成的所有类。问题是我想生成字节码(.class 文件)和 jar,但不是源代码。有没有一种优雅的方法可以做到这一点,而无需生成 .java 文件,然
我是 Maven 和 Jcodemodel 的新手。我正在尝试创建一个原型(prototype),它将接受 wsdl 并生成代码。我需要通过实现接口(interface)来创建实现类文件的java代码
我使用 com.sun.codemodel.JCodeModel 生成近 1000 个类,每个类都有关联的 JUnit。 我还生成了一个执行各个 JUnit 测试用例的 JUnit 测试套件。 为了完
[install4j] 警告:输出错误:java.io.IOException:com/sun/codemodel/JCodeModel.build(L) 包含字节码 00039:invokeinte
我是一名优秀的程序员,十分优秀!