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