2016-11-20 3 views
5

Я работаю над обработчиком аннотаций, написанным в java. Я использую JavaPoet для генерации некоторых строк кода. Мне нужно сгенерировать оператор switch. Теперь я использую следующий код:Генерация оператора switch с JavaPoet

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; 
} 

ли это единственный способ, чтобы создать переключатель заявление с javapoet или есть лучший способ (с использованием beginControlFlow) для создания того же кода?

ответ

4

В операторах switch для JavaPoet мало, поэтому у вас есть, вероятно, лучшее, что вы можете сделать. Обратите внимание, что вы можете использовать $> и $<, чтобы отрегулировать отступы в случаях, если хотите.

Смежные вопросы