解决lambda表达式内出现异常无法throw抛出的问题

目录
  • lambda表达式内出现异常无法throw抛出
    • 问题描述
    • 问题原因
    • 解决方案
  • lambda表达式中无法抛出受检异常

lambda表达式内出现异常无法throw抛出

问题描述

今儿在使用lambda表达式时,lambda表达式内出现了异常,准备直接抛出,没想到却还是报错:

由于博主lambda表达式用的比较少,刚看到这问题时,可以说是一脸懵逼。毕竟两边的提示可以说是前后矛盾啊。

刷新几下编译器还是报错,就只能老老实实的找原因。

问题原因

所幸Java是一门比较成熟的语言,前辈们已经踩了足够的坑.

之所以有这种现象是因为lambda表达式本身没有处理异常的机制 ,以至于遇到受检异常时,无法通过主动抛出来解决.

但具体的也不是很清楚了,若有其他道友遇到这种问题,欢迎讨论.

解决方案

将受检异常包装成非受检异常,即RuntimeException

效果如下:

虽然效果还是不甚理想,就当涨了一波lambda表达式的熟练度吧。

lambda表达式中无法抛出受检异常

抛出受检异常的时候,我们的接口应该带上throw关键字,但通过lambda表达式实现的Consumer的accept方法并不带有关键字,因此在lambda表达式中不能抛出受检异常必须把它吃掉

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Java语法中Lambda表达式无法抛出异常的解决

    目录 Lambda表达式无法抛出异常 1.Demo 例子 2.编译通过 lambda表达式异常应该如何处理 我们看一个例子 Lambda表达式无法抛出异常 1.Demo 例子 错误提示 - Unhandled exception: java.io.IOException; public static void main(String[] args) throws IOException{ Stream.of("a", "b", "c").forE

  • java 8 lambda表达式中的异常处理操作

    简介 java 8中引入了lambda表达式,lambda表达式可以让我们的代码更加简介,业务逻辑更加清晰,但是在lambda表达式中使用的Functional Interface并没有很好的处理异常,因为JDK提供的这些Functional Interface通常都是没有抛出异常的,这意味着需要我们自己手动来处理异常. 因为异常分为Unchecked Exception和checked Exception,我们分别来讨论. 处理Unchecked Exception Unchecked exc

  • java迭代器移除元素出现并发修改异常的原因及解决

    迭代器(Iterator的对象)主要用于遍历集合,体现的就是迭代器模式. Iterator接口定义了以下四种方法. boolean hasNext():如果集合还没遍历完就返回true. Object next():返回集合里的下一个元素. void remove():删除集合里上一次next方法返回的元素. void forEachRemaining(Consumer action):这是java8新增的默认方法,可用Lambda表达式遍历数组. 使用迭代器遍历元素时不能不能通过Collect

  • 解决lambda表达式内出现异常无法throw抛出的问题

    目录 lambda表达式内出现异常无法throw抛出 问题描述 问题原因 解决方案 lambda表达式中无法抛出受检异常 lambda表达式内出现异常无法throw抛出 问题描述 今儿在使用lambda表达式时,lambda表达式内出现了异常,准备直接抛出,没想到却还是报错: 由于博主lambda表达式用的比较少,刚看到这问题时,可以说是一脸懵逼.毕竟两边的提示可以说是前后矛盾啊. 刷新几下编译器还是报错,就只能老老实实的找原因. 问题原因 所幸Java是一门比较成熟的语言,前辈们已经踩了足够的

  • Java异常分类处理抛出捕获操作详解

    目录 什么是异常 1.算术异常 2.数组越界异常 3.空指针异常 异常的分类 异常的抛出(throw关键字) 异常的捕获 throws关键字 try catch关键字 finally关键字 总结 什么是异常 “程序运行时,发生的不被期望的事件,它阻止了程序按照程序员的预期正常执行,这就是异常.” 我们在平时写代码的过程中就可能会遇到异常,给大家给举一些容易遇到常见的异常例子: 1.算术异常 Exception in thread “main” java.lang.ArithmeticExcept

  • java 异常之手动抛出与自动抛出的实例讲解

    java异常处理机制的两类 1.抓:异常的处理,有两种方式 ① try-catch-finally ② throws 2.抛: ① 自动抛出 可以理解为所有没有使用throw关键字的异常处理都是自动抛出,由jvm进行判断和抛出. ②手动抛出 throw + 异常类的对象 >异常类可以是现成的,也可以是自己创建的异常类, 抛出异类的类型:若是RuntimException,可以不用显示处理. 若是一个Exception,必须要显示的处理. /* *1.手动抛出一个异常的例子 */ public c

  • 解决Map集合使用get方法返回null抛出空指针异常问题

    目录 前言 空指针问题 原因 map.get,小心get出一个空指针 前言 1.Map里面只能存放对象,不能存放基本类型,例如int,需要使用Integer 2.Map集合取出时,如果变量声明了类型,会先进行拆箱,再进行转换. 空指针问题 如图,在程序执行到27行时,出现了空指针异常.按道理来讲,对于Map集合是有Key和Value的,Collection集合是只有Value.如果执行get()方法,当不存在key时,对应的应该返回null. map.get(s.charAt(i)); 因此 由

  • C++抛出和接收异常的顺序

    异常(exception)是C++语言引入的错误处理机制.它 采用了统一的方式对程序的运行时错误进行处理,具有标准化.安全和高效的特点.C++为了实现异常处理,引入了三个关键字:try.throw.catch.异常由throw抛出,格式为throw[expression],由catch捕捉.Try语句块是可能抛出异常的语句块,它通常和一个或多个catch语句块连续出现. try语句块和catch语句块必须相互配合,以下三种情况都会导致编译错误: (1)只有try语句块而没有catch语句块,或者

  • C++ 中的Lambda表达式写法

    小喵的唠叨话: 寒假之后,小喵在家里无所事事,最近用C++写代码的时候,用到了std::sort这个函数,每次用这个函数,小喵似乎都得查一下lambda表达式的写法.正好最近很闲,不如总结一下. 在Bing上搜索 C++ lambda ,第一条记录就是MSDN上的C++ lambda的介绍.本文也是基于这篇文章来写的. 那么接下来,我们分几个部分来介绍. 一.什么是Lambda表达式 MSDN上对lambda表达式的解释: 在 C++ 11 中,lambda 表达式(通常称为 "lambda&q

  • 结合C++11新特性来学习C++中lambda表达式的用法

    在 C++ 11 中,lambda 表达式(通常称为 "lambda")是一种在被调用的位置或作为参数传递给函数的位置定义匿名函数对象的简便方法. Lambda 通常用于封装传递给算法或异步方法的少量代码行. 本文定义了 lambda 是什么,将 lambda 与其他编程技术进行比较,描述其优点,并提供一个基本示例. Lambda 表达式的各部分 ISO C++ 标准展示了作为第三个参数传递给 std::sort() 函数的简单 lambda: #include <algorit

  • 快速入门Java中的Lambda表达式

    Lambda简介 Lambda表达式是Java SE 8中一个重要的新特性.lambda表达式允许你通过表达式来代替功能接口. lambda表达式就和方法一样,它提供了一个正常的参数列表和一个使用这些参数的主体(body,可以是一个表达式或一个代码块). Lambda表达式还增强了集合库. Java SE 8添加了2个对集合数据进行批量操作的包: java.util.function 包以及 java.util.stream 包. 流(stream)就如同迭代器(iterator),但附加了许多

  • C++中Lambda表达式的语法与实例

    目录 概述 语法分析 捕获列表 关键字声明 mutable exception 示例 捕获列表按值传递 捕获列表按引用传递 总结 概述 C++ 11 中的 Lambda 表达式用于定义并创建匿名的函数对象,以简化编程工作.Lambda 的语法形式如下: [捕获列表] (参数) mutable 或 exception 声明 -> 返回值类型 {函数体} //计算两个值的和 auto func = [](int a, int b) -> int{return a+b;}; //当返回值的类型是确定

  • C++Lambda表达式详解

    目录 概述 语法分析 捕获列表 关键字声明 示例 捕获列表按值传递 总结 概述 C++ 11 中的 Lambda 表达式用于定义并创建匿名的函数对象,以简化编程工作.Lambda 的语法形式如下: [捕获列表] (参数) mutable 或 exception 声明 -> 返回值类型 {函数体} //计算两个值的和 auto func = [](int a, int b) -> int{return a+b;}; //当返回值的类型是确定时,可以忽略返回值 auto func = [](int

随机推荐