如何用javapoet动态生成代码?更改方法参数
How to generate code dynamically with javapoet? Change the method parameters
我正在尝试生成 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)
我不知道我是否可以用参数做类似的事情,或者即使有其他方法可以动态地改变世代。
提前谢谢你。
这可能有帮助:
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()
我正在尝试生成 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)
我不知道我是否可以用参数做类似的事情,或者即使有其他方法可以动态地改变世代。 提前谢谢你。
这可能有帮助:
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()