2013-05-13 53 views
1

我想使用codemodel生成下面的代碼,但我不知道如何創建匿名類語法。我找不到它的codemodel文檔(https://codemodel.java.net/nonav/apidocs/index.html?com/sun/codemodel如何使用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)); 

回答

4

假設你可以在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() { 
    } 
}