用JavaPoet生成switch语句
Generation of switch statement with JavaPoet
我正在研究用 java 编写的注释处理器。我正在使用 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;
}
这是用 javapoet 生成 switch 语句的唯一方法还是有更好的方法(使用 beginControlFlow)来生成相同的代码?
JavaPoet 中没有太多关于 switch 语句的内容,所以您所拥有的可能是您能做的最好的。请注意,您可以根据需要使用 $>
和 $<
调整大小写内的缩进。
我正在研究用 java 编写的注释处理器。我正在使用 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;
}
这是用 javapoet 生成 switch 语句的唯一方法还是有更好的方法(使用 beginControlFlow)来生成相同的代码?
JavaPoet 中没有太多关于 switch 语句的内容,所以您所拥有的可能是您能做的最好的。请注意,您可以根据需要使用 $>
和 $<
调整大小写内的缩进。