如何使用CodeModel调用另一个类的方法

时间:2018-06-29 09:47:30

标签: java sun-codemodel

我有一个Java类,说Class A已经存在一些方法,我正在使用代码模型说classB生成一个类,而在使用代码模型进行生成时,我试图将那个{{1 }}。

我在下面尝试过

classA

但是它不起作用,如果有人知道如何做,我将不胜感激

我想生成一个像这样的方法:

method
    .body()
    .invoke(JExpr.ref(helper), "display")
    .arg("hello");

我也对如何生成以下方法感兴趣:

public void method() { 
    Helper helper = new Helper(); 
    helper.display("hello") 
}

1 个答案:

答案 0 :(得分:1)

让我们开始:

public void method() { 
    Helper helper = new Helper(); 
    helper.display("hello") 
}

假设您已经拥有一个JMethod method,则首先需要创建一个helper实例:

JVar helper = method
    .body()
    .decl(
        codeModel.ref(Helper.class),
        "helper",
        JExpr._new(codeModel.ref(Helper.class)));

然后只需在其上调用所需的方法:

method
    .body()
    .invoke(helper, "display")
    .arg("hello");

没有这个人

@Test
public void method() { 
    Assert.fail("message") 
}

更容易,您只需要执行静态调用即可。大致情况:

method
    .body()
    .staticInvoke(codeModel.ref(Assert.class))
    .arg("message");

如果您对注释感兴趣:

method
    .annotate(Test.class);

请注意,在上面的调用中,我可以将字符串直接传递给arg方法(arg("message"))。这只是字符串的一种便捷方法。如果要使用其他类型,例如primitve类型,则需要执行类似JExpr.lit(12.34)的操作。