lambda表达式 针对非runtimeException的优化处理

2 篇文章 0 订阅

 

在写lambda表达式的时候遇到非运行时异常,会发现 lambda表达式中需要处理一遍,调用的地方还需要处理一遍例如:

 

需要做如下处理

 

看起来很丑,用起来很不方便,这种异常的类在

RestHighLevelClient中的方法很常见,如下:

每一次调用try Cathy 用起来很麻烦,能不能 用lambda 解决呢?

自己定义异常类

如:

@FunctionalInterface
public interface ThrowingFunction<T,E > {
    //对异常选择上抛	原Function接口没有上抛 才使得不好处理
    E  apply (T t) throws Exception;
}
@FunctionalInterface
public interface ThrowingConsumer<T> {
    void accept(T t) throws Exception;
}

 

优化后代码如下:

public class TestException {

    public static void testIoException(String line) throws IOException {
        System.out.println(line);
        FileReader fileReader = new FileReader("");
    }

    public static void tryExcptionTest(String line, Consumer<String> consumer) {
        try {
            consumer.accept(line);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void tryException(String line,ThrowingConsumer<String> throwingConsumer){
        try {
            throwingConsumer.accept(line);
        }catch (Exception e){
            e.printStackTrace();
        }
    }


    public static void main(String[] args) {
        tryException("优化异常",TestException::testIoException);

        tryExcptionTest("124", line -> {
            try {
                testIoException(line);
            } catch (Exception e) {

            }
        });
    }


}

执行结果如下:

完美解决 ,在

 public static void tryException(String line,ThrowingConsumer<String> throwingConsumer){
        try {
            throwingConsumer.accept(line);
        }catch (Exception e){
            e.printStackTrace();
        }
    }

// 通过这种方式就可以 消除 非运行时异常 每一次调用都要处理异常的 重复代码

// 调用方式如下:
  tryException("优化异常",TestException::testIoException);

 

 

针对ElasticSearch 中的统一处理方式如下:

  public TransportMessage executor(RestHighLevelClient client, ThrowingFunction<RestHighLevelClient, TransportMessage> function) {
        try {
            return function.apply(client);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值