【问题标题】:Generation of switch statement with JavaPoet用 JavaPoet 生成 switch 语句
【发布时间】:2016-11-21 03:37:22
【问题描述】:

我正在开发一个用 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)来生成相同的代码?

【问题讨论】:

    标签: java javapoet


    【解决方案1】:

    JavaPoet 中没有太多的 switch 语句,所以你所拥有的可能是你能做的最好的。请注意,如果您愿意,可以使用$>$< 调整大小写内的缩进。

    【讨论】:

      猜你喜欢
      • 2014-02-06
      • 2016-05-08
      • 2017-02-03
      • 1970-01-01
      • 1970-01-01
      • 2021-10-20
      • 2013-02-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多