lambda表达式中对接口优雅简写

最近写代码的时候发现了一段看不懂的代码,之后查了些资料,才知道是lambd的简写形式,在此记录一下

看不懂的代码

RestClientBuilder.RequestConfigCallback requestConfigCallback = builder -> {
    
    
    builder.setConnectTimeout(clientProperties.getConnTimeout())
            .setSocketTimeout(clientProperties.getSocketTimeout())
            .setConnectionRequestTimeout(clientProperties.getConnectionRequestTimeout());
    return builder;
};

此段代码中的builder在之前根本没有定义,当时笔者就很奇怪为什么这样写没有被idea检测出错误,查了些资料后才发现builder原来并不是我想的那样是一个没有定义的变量,下面给出还原后的代码

还原后的代码

// 创建RequestConfigCallback对象,并重写customizeRequestConfig方法
RestClientBuilder.RequestConfigCallback requestConfigCallback = new RestClientBuilder.RequestConfigCallback() {
    
    
    @Override
    public RequestConfig.Builder customizeRequestConfig(RequestConfig.Builder builder) {
    
    
        builder.setConnectTimeout(clientProperties.getConnTimeout())
                .setSocketTimeout(clientProperties.getSocketTimeout())
                .setConnectionRequestTimeout(clientProperties.getConnectionRequestTimeout());
        return builder;
    }
};

builder实际上是RequestConfigCallback接口中定义的一个方法的入参变量,lambda语法将其简化后变成了函数式写法,从而让代码变的优雅了很多;

更简化的代码

RestClientBuilder.RequestConfigCallback configCallback = requestConfigBuilder -> requestConfigBuilder
            .setConnectTimeout(clientProperties.getConnTimeout())
            .setSocketTimeout(clientProperties.getSocketTimeout())
            .setConnectionRequestTimeout(clientProperties.getConnectionRequestTimeout());

上面这段代码中{}和return都省略了,但是这样的写法有个前提条件:

  • 当前接口的抽象方法中的入参只有一个,并且该方法的返回对象和入参对象相同,如下图:
    在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_42697271/article/details/119205901
今日推荐