Как вызвать метод другого класса, используя codemodel - PullRequest
0 голосов
/ 29 июня 2018

У меня есть класс 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 Ответ

0 голосов
/ 29 июня 2018

Начнем с:

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).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...