如何使用代码模型调用另一个 class 的方法

How to call a method of another class using codemodel

我有一个 java class 说 Class A,其中一些方法已经存在,我正在使用代码模型生成一个 class 说 classB 和在使用代码模型生成时,我试图调用 classA.

的方法之一

我试过下面

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

但它不起作用,如果有人知道如何做同样的事情,我将不胜感激

我想生成如下方法:

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

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

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

}

让我们开始:

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"))。这只是字符串的一种便捷方法。如果你想使用其他类型,比如原始类型,你需要做一些像 JExpr.lit(12.34).