Как создать анонимный класс, используя sun-codemodel?
Я пытаюсь сгенерировать код ниже, используя codemodel, но я не знаю, как создать синтаксис анонимного класса. Я не могу найти его в документации по codemodel ( https://codemodel.java.net/nonav/apidocs/index.html?com/sun/codemodel)
ContentProducer cp = new ContentProducer() {
public void writeTo(OutputStream outstream) {
try {
Writer writer = new OutputStreamWriter(outstream, "UTF-8");
writer.write("<product><descricao>Update de descricao</descricao></product>");
writer.flush();
} catch (IOException e) {
e.printStackTrace();
}
}
};
Я могу использовать приведенный ниже код для создания экземпляра переменной "ContentProducer", но я не знаю, как реализовать метод writeTo рядом с конструктором.
JClass ContentProducer = events.ref(org.apache.http.entity.ContentProducer.class);
JVar contentProducer = tryBlock.body().decl(ContentProducer, "contentProducer").init(JExpr._new(ContentProducer));
1 ответ
Решение
Предполагая, что вы можете заполнить writeTo()
Тело метода, что вам нужно сделать, это реализовать класс как анонимный внутренний класс следующим образом:
JDefinedClass anonymousContentProducer = codeModel.anonymousClass(ContentProducer.class);
JBlock methodBody = anonymousContentProducer.method(JMod.PUBLIC, codeModel.VOID, "writeTo").body();
body.decl(anonymousContentProducer, "contentProducer", JExpr._new(anonymousContentProducer));
какие выводы:
ContentProducer contentProducer = new ContentProducer() {
public void writeTo() {
}
}