2016-11-20 15 views
5

Pracuję nad procesorem adnotacji napisanym w języku Java. Używam JavaPoet do generowania niektórych linii kodu. Muszę wygenerować instrukcję "switch". Teraz używam następujący kod:Generowanie instrukcji przełącznika za pomocą 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(); 

wygenerować następujący kod:

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

Czy to jedyna droga do generowania instrukcji switch z javapoet czy istnieje lepszy sposób (za pomocą beginControlFlow), aby wygenerować ten sam kod?

Odpowiedz

4

Nie ma zbyt wiele w JavaPoet dla instrukcji switch, więc to, co masz, jest prawdopodobnie najlepsze. Zauważ, że możesz użyć $> i $<, aby dostosować wcięcia w przypadkach, jeśli chcesz.

Powiązane problemy