【问题标题】:How to generate code dynamically with javapoet? Change the method parameters如何使用 javapoet 动态生成代码?更改方法参数
【发布时间】:2019-08-15 12:39:10
【问题描述】:

我正在尝试生成依赖于其他变量的 java 代码。 在这个特定的时刻,我试图根据协议生成代码。所以我可以接收 CoapResponse 对象或 Response 对象形式(javax)。

如果我可以重用相同的代码并仅以某种方式更改变量,我不知道是否可以使用不同的参数重复所有代码两次。

我要修改的代码如下:


  MethodSpec payloadInterpreter = MethodSpec.methodBuilder("payloadInterpreter")
          .addModifiers(Modifier.PRIVATE)
          .addModifiers(Modifier.STATIC)
         .addParameter(Response.class, "getResponse")
          ....

而且参数可能是 CoapResponse.class 而不是 Response.class。

我在使用语句时遇到了同样的问题,但我解决了创建使用服务在运行时收到的信息的文字的问题。 一个例子:

if (MD.getMediatype().equals("JSON")){
      ReadOutDeclaration="JSONObject readout= null";
      GetReadOut="readout = getResponse.readEntity(JSONObject.class)";

然后:

 MethodSpec payloadInterpreter = MethodSpec.methodBuilder("payloadInterpreter")
     .addModifiers(Modifier.PRIVATE)
     .addModifiers(Modifier.STATIC)
     .addParameter(Response.class, "getResponse")
     .addStatement("$L",ReadOutDeclaration)
     .beginControlFlow("try")
     .addStatement("$L", GetReadOut)
     .addStatement("System.out.println(\"Provider Response payload: \" + $L)",ReadOutPrint)   

我不知道我是否可以使用参数做类似的事情,或者即使有其他方法可以动态更改生成。 提前谢谢你。

【问题讨论】:

    标签: java javapoet


    【解决方案1】:

    这可能会有所帮助:

    MethodSpec.Builder payloadInterpreterMethod = MethodSpec.methodBuilder("payloadInterpreter")
              .addModifiers(Modifier.PRIVATE)
              .addModifiers(Modifier.STATIC);
    if (condition) {
      payloadInterpreterMethod.addParameter(Response.class, "getResponse");
    } else {
      payloadInterpreterMethod.addParameter(CoapResponse.class, "getResponse");
    }
    

    一旦您想将其添加到 TypeSpec,请使用:

    payloadInterpreterMethod.build()
    

    【讨论】:

    • 谢谢!我不知道我可以破坏建造者。这解决了我的问题,它将为我节省大量时间和代码行!
    猜你喜欢
    • 1970-01-01
    • 2015-11-26
    • 2011-01-22
    • 2023-01-12
    • 1970-01-01
    • 2022-01-05
    • 2021-03-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多