【问题标题】:How to add a CodeBlock as part of MethodSpec's statement in Javapoet如何在 Javapoet 中添加 CodeBlock 作为 MethodSpec 语句的一部分
【发布时间】:2021-04-17 09:51:18
【问题描述】:

我想创建一个 lambda 表达式,如:

// some code
CompletableFuture.handle((s,t) -> {
if(t != null){
//some code}
else{
// some code}
});
//some code

我在 CodeBlock 代码中有 if-else 的所有逻辑,在 MethodSpec 方法中有父代码。

我正在尝试按如下方式添加此代码:

method.addStament("CompletableFuture.handle((s,t) -> $N)", code.build);

这显然是行不通的!仅需要有关 Lamda 部分的帮助。

任何帮助!

【问题讨论】:

    标签: java javapoet


    【解决方案1】:

    我试试这个:

     /**
     * Out code is below:
     * 
     * public void lambdaTest() {
     *   CompletableFuture.supplyAsync(() -> 1).handle((num, throwable) ->  {
     *     if (num > 2) {
     *       return true;
     *     }
     *     return false;
     *   } );
     * }
     * @return
     */
    public MethodSpec lambdaTest() {
        String param1 = "num", param2 = "throwable";
        CodeBlock.Builder builder = CodeBlock.builder();
        CodeBlock.Builder subBuilder = CodeBlock.builder();
        subBuilder.beginControlFlow("if ($N > 2)", param1)
                .addStatement("return true")
                .endControlFlow()
                .addStatement("return false");
        builder.beginControlFlow("CompletableFuture.supplyAsync(() -> 1).handle(($N, $N) -> ", param1, param2)
                .add(subBuilder.build())
                .endControlFlow(")");
        return MethodSpec
                .methodBuilder("lambdaTest")
                .addModifiers(Modifier.PUBLIC)
                .returns(void.class)
                .addCode(builder.build())
                .build();
    }
    

    【讨论】:

      猜你喜欢
      • 2018-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-28
      • 2013-05-11
      • 2016-06-07
      • 2018-11-11
      相关资源
      最近更新 更多