java lambda函数_抛出异常的Java 8 Lambda函数?

实际上你可以扩展Consumer(和Function(等等)有一个处理异常的新接口-使用Java 8的默认方法!

考虑这个接口(扩展Consumer):@FunctionalInterfacepublic interface ThrowingConsumer extends Consumer {

@Override

default void accept(final T elem) {

try {

acceptThrows(elem);

} catch (final Exception e) {

// Implement your own exception handling logic here..

// For example:

System.out.println("handling an exception...");

// Or ...

throw new RuntimeException(e);

}

}

void acceptThrows(T elem) throws Exception;}

然后,例如,如果您有一个列表:final List list = Arrays.asList("A", "B", "C");

如果你想吃的话。带着forEach)使用一些抛出异常的代码,您通常会设置一个try/catch块:final Consumer consumer = aps -> {

try {

// maybe some other code here...

throw new Exception("asdas");

} catch (final Exception ex) {

System.out.println("handling an exception...");

}};list.forEach(consumer);

但是使用这个新接口,您可以使用lambda表达式实例化它,编译器不会抱怨:final ThrowingConsumer throwingConsumer = aps -> {

// maybe some other code here...

throw new Exception("asdas");};list.forEach(throwingConsumer);

甚至只是为了更简洁!:list.forEach((ThrowingConsumer) aps -> {

// maybe some other code here...

throw new Exception("asda");});

更新:看起来有一个非常好的实用程序库榴莲叫错误它可以用更多的灵活性来解决这个问题。例如,在上面的实现中,我显式地定义了错误处理策略(System.out...或throw RuntimeException),而Durian的错误允许您通过一组大型实用方法动态地应用策略。谢谢分享它,@NedTwigg!

样本使用情况:list.forEach(Errors.rethrow().wrap(c -> somethingThatThrows(c)));

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值