1

如何从内部静态类扩展生成的类?

例如,我有

class Foo {
    static class Bar {
    }
}

我希望我生成的类从 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 {}

解决方案

你应该像这样传递类名:

codeModel.ref("android.support.v7.widget.RecyclerView.ViewHolder")

CodeModel 会生成

package pckg;

import somePckg.Foo.Bar;

public class GeneratedClass extends Bar {
}
4

2 回答 2

0

这里有几个问题:

  1. package是保留字,请使用不同的包名称(对于此响应,我将使用example)。
  2. example.Foo.Bar使用 JCodeModel 您应该使用规范名称“ ”引用该类

此外,如果您将其公开,则可以直接引用该类:

JClass aClass = codeModel.ref(Bar.class);
于 2017-04-05T21:05:50.283 回答
0

您使用的是什么版本的代码模型 - 我相信最新的是 2.6,如下所示。我刚刚用可比较的代码做了一个测试,得到了你想要的结果

<dependency>
    <groupId>com.sun.codemodel</groupId>
    <artifactId>codemodel</artifactId>
    <version>2.6</version>
</dependency>
于 2017-04-04T22:15:54.363 回答