2016-11-20 42 views
5

我正在研究用java編寫的註釋處理器。我正在使用JavaPoet生成一些代碼行。我必須生成一個'switch'語句。現在,我使用下面的代碼:使用JavaPoet生成switch語句

MethodSpec.Builder methodBuilder = MethodSpec.methodBuilder("parseOnXml") 
    .addAnnotation(Override.class) 
    .addModifiers(Modifier.PUBLIC) 
    .addParameter(typeName(XmlBinderContext.class), "context") 
    .addParameter(typeName(XmlWrapperParser.class), "wrapper") 
    .addParameter(typeName(Integer.TYPE), "currentEventType") 
    .addJavadoc("create new object instance\n") 
    .returns(typeName(item.getElement())); 

... 

methodBuilder.beginControlFlow("switch(eventType)"); 
methodBuilder.addCode("case $T.START_ELEMENT:\n", XMLEvent.class); 
methodBuilder.addStatement("break"); 
methodBuilder.addCode("case $T.END_ELEMENT:\n", XMLEvent.class); 
methodBuilder.addStatement("break"); 
methodBuilder.addCode("case $T.CDATA:\n", XMLEvent.class); 
methodBuilder.addCode("case $T.CHARACTERS:\n", XMLEvent.class); 
methodBuilder.addStatement("break"); 
methodBuilder.addCode("default:\n"); 
methodBuilder.addStatement("break"); 
methodBuilder.endControlFlow(); 

生成以下代碼:

switch(eventType) { 
    case XMLEvent.START_ELEMENT: 
    break; 
    case XMLEvent.END_ELEMENT: 
    break; 
    case XMLEvent.CDATA: 
    case XMLEvent.CHARACTERS: 
    break; 
    default: 
    break; 
} 

是它生成一個switch語句與javapoet唯一的辦法還是有更好的方法(使用beginControlFlow )生成相同的代碼?

回答

4

在JavaPoet中沒有太多的switch語句,所以你擁有的可能是你能做的最好的。請注意,如果您願意,您可以使用$>$<來調整案例中的縮進。