Как вызвать метод другого класса, используя codemodel

У меня есть класс Java, скажем, класс A с некоторыми методами уже присутствует, я создаю класс с использованием модели кода, скажем 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") 

}

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")). Это просто удобный метод для строк. Если вы хотите использовать другие типы, такие как примитивные типы, вам нужно будет сделать что-то вроде JExpr.lit(12.34),

Другие вопросы по тегам