1

我想创建一个 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 部分的帮助。

任何帮助!

4

1 回答 1

0

我试试这个:

 /**
 * 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();
}
于 2021-10-14T07:30:34.700 回答