0

我有一堂课和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课堂上那样创建新对象?

4

2 回答 2

1

您可以为类赋予该Parent类型的protected属性SomeClass并直接在Derived类中使用它:

public class Parent {

    protected SomeClass someObject;

    public Parent() {
        this.someObject = new SomeClass();
    }
}



public class Derived extends Parent {

    public void printInvoked() {
        System.out.println(this.someObject.invoke());
    }
}


public class SomeClass {

    public String invoke() {
        return "SomeClass invoked";
    }
}
于 2018-07-05T09:35:01.367 回答
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();

}
于 2018-07-05T15:53:11.863 回答