如何使用javapoet动态生成代码?更改方法参数



我正在尝试生成依赖于其他变量的java代码。 在这个特定的时刻,我正在尝试根据协议生成代码。所以我可以接收CoapResponse对象或响应对象表单(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)   

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

这可能有帮助:

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()

相关内容

  • 没有找到相关文章

最新更新