Как вызвать метод другого класса, используя 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)
,