2016-11-20 39 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语句,所以你拥有的可能是你能做的最好的。请注意,如果您愿意,您可以使用$>$<来调整案例中的缩进。