使用代码模型扩展内部 class
Extend inner class using code model
如何从内部静态 class 扩展生成的 class?
例如,我有
class Foo {
static class Bar {
}
}
我希望生成的 class 从 Bar
扩展
JCodeModel codeModel = new JCodeModel()
JClass aClass = codeModel.ref("somePckg.Foo$Bar")
JPackage jp = codeModel._package("pckag")
JDefinedClass jc = jp._class("GeneratedClass")
jc._extends(aClass)
codeModel.build(new File("generated/"))
我得到的是
import somePckg.Foo$Bar;
public class GeneratedClass extends Foo$Bar {}
但我想要的是
import somePckg.Foo;
public class GeneratedClass extends Foo.Bar {}
解决方法:
您应该像这样传递 class 名称:
codeModel.ref("android.support.v7.widget.RecyclerView.ViewHolder")
而 CodeModel 将生成
package pckg;
import somePckg.Foo.Bar;
public class GeneratedClass extends Bar {
}
您使用的是什么版本的代码模型 - 我相信最新的是 2.6,如下所示。我刚刚用可比较的代码做了一个测试,得到了你想要的结果
<dependency>
<groupId>com.sun.codemodel</groupId>
<artifactId>codemodel</artifactId>
<version>2.6</version>
</dependency>
这里有几个问题:
package
是保留字,请使用不同的包名称(对于此响应,我将使用 example
)。
- 对于 JCodeModel,您应该使用规范名称“
example.Foo.Bar
” 引用 class
此外,您可以直接引用 class ,如果您 public:
JClass aClass = codeModel.ref(Bar.class);
如何从内部静态 class 扩展生成的 class?
例如,我有
class Foo {
static class Bar {
}
}
我希望生成的 class 从 Bar
扩展JCodeModel codeModel = new JCodeModel()
JClass aClass = codeModel.ref("somePckg.Foo$Bar")
JPackage jp = codeModel._package("pckag")
JDefinedClass jc = jp._class("GeneratedClass")
jc._extends(aClass)
codeModel.build(new File("generated/"))
我得到的是
import somePckg.Foo$Bar;
public class GeneratedClass extends Foo$Bar {}
但我想要的是
import somePckg.Foo;
public class GeneratedClass extends Foo.Bar {}
解决方法:
您应该像这样传递 class 名称:
codeModel.ref("android.support.v7.widget.RecyclerView.ViewHolder")
而 CodeModel 将生成
package pckg;
import somePckg.Foo.Bar;
public class GeneratedClass extends Bar {
}
您使用的是什么版本的代码模型 - 我相信最新的是 2.6,如下所示。我刚刚用可比较的代码做了一个测试,得到了你想要的结果
<dependency>
<groupId>com.sun.codemodel</groupId>
<artifactId>codemodel</artifactId>
<version>2.6</version>
</dependency>
这里有几个问题:
package
是保留字,请使用不同的包名称(对于此响应,我将使用example
)。- 对于 JCodeModel,您应该使用规范名称“
example.Foo.Bar
” 引用 class
此外,您可以直接引用 class ,如果您 public:
JClass aClass = codeModel.ref(Bar.class);