如何使用CodeModel使用父类的任何字段

时间:2018-07-05 09:25:32

标签: java sun-codemodel

我有一个课程Parent和一个课程Derived,例如

class Parent {
    SomeClass obj = new SomeClass();
}

现在在我想使用CodeModel生成的类下面

class Derived extends Parent {
    String s = obj.invoke();
}

我在下面尝试过,但是没有用

tryBlock.body().decl(codeModel.ref(String.class), "s", 
 (codeModel.ref(Parent.class)).staticRef("obj").invoke("invoke"));

如何调用obj而不是像在Parent类中那样创建新对象?

2 个答案:

答案 0 :(得分:1)

您可以为Parent类提供类型protected的{​​{1}}属性,并直接在SomeClass类中使用它:

Derived

答案 1 :(得分:1)

您可以直接使用JExpr.ref()引用该字段并将其用于初始化该字段:

    JDefinedClass derived = codeModel._class(JMod.PUBLIC, "Derived", ClassType.CLASS);
    derived._extends(Parent.class);

    derived.field(0, String.class, "s",  JExpr.ref("obj").invoke("invoke"));

这将生成以下内容:

public class Derived
    extends Parent
{

    String s = obj.invoke();

}