0

我正在尝试生成依赖于其他变量的 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)   

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

4

1 回答 1

0

可能这有帮助:

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()
于 2019-08-16T11:41:08.827 回答