Java8 Lambda 和异常

2024-01-13

我想知道是否有人可以向我解释以下奇怪的现象。我正在使用 Java 8 更新 11。

鉴于这个方法

private <F,T> T runFun(Function<Optional<F>, T> fun, Optional<F> opt) {
   return fun.apply(opt) ;
}

如果我首先构造一个函数对象,并将其传递给上面的方法,那么事情就会编译。

private void doesCompile() {
    Function<Optional<String>, String> fun = o -> o.orElseThrow(() -> new RuntimeException("nah"));
    runFun(fun, Optional.of("foo"));

}

但是,如果我将函数内联为 lambda,编译器会说

未报告的异常 X;必须被抓住或宣布被扔出

private void doesNotCompile () {
    runFun(o -> o.orElseThrow(() -> new RuntimeException("nah")), Optional.of("foo"));
}

Update: 结果错误信息被maven缩写了。如果直接用javac编译,错误为:

error: unreported exception X; must be caught or declared to be thrown
            runFun(o -> o.orElseThrow(() -> new RuntimeException("nah")), Optional.of("foo"));
                                     ^
  where X,T are type-variables:
    X extends Throwable declared in method <X>orElseThrow(Supplier<? extends X>)
    T extends Object declared in class Optional

另请参阅here https://gist.github.com/rompetroll/667bf46ac0168a92497a用于可运行的测试代码。


这就是为我解决问题的原因:

而不是写作

optional.map(this::mappingFunction).orElseThrow(() -> new BadRequestException("bla bla"));

I wrote:

optional.map(this::mappingFunction).<BadRequestException>orElseThrow(() -> new BadRequestException("bla bla"));

添加显式<BadRequestException>有助于解决这些 lambda 边缘情况(这非常烦人......)

更新:这是为了防止您无法更新到最新的 JDK 版本,如果可以的话您应该...

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java8 Lambda 和异常 的相关文章

  • 序列的排列?

    我有具体数量的数字 现在我想以某种方式显示这个序列的所有可能的排列 例如 如果数字数量为3 我想显示 0 0 0 0 0 1 0 0 2 0 1 0 0 1 1 0 1 2 0 2 0 0 2 1 0 2 2 1 0 0 1 0 1 1 0
  • 如何通过 javaconfig 使用 SchedulerFactoryBean.schedulerContextAsMap

    我使用 Spring 4 0 并将项目从 xml 移至 java config 除了访问 Service scheduleService 带注释的类来自QuartzJobBean executeInternal 我必须让它工作的 xml 位
  • 在内存中使用 byte[] 创建 zip 文件。 Zip 文件总是损坏

    我创建的 zip 文件有问题 我正在使用 Java 7 我尝试从字节数组创建一个 zip 文件 其中包含两个或多个 Excel 文件 应用程序始终完成 没有任何异常 所以 我以为一切都好 当我尝试打开 zip 文件后 Windows 7 出
  • 为什么 JTables 使 TableModel 在呈现时不可序列化?

    所以最近我正在开发一个工具 供我们配置某些应用程序 它不需要是什么真正令人敬畏的东西 只是一个具有一些 SQL 脚本生成功能并创建几个 XML 文件的基本工具 在此期间 我使用自己的 AbstractTableModel 实现创建了一系列
  • .properties 中的通配符

    是否存在任何方法 我可以将通配符添加到属性文件中 并且具有所有含义 例如a b c d lalalala 或为所有以结尾的内容设置一个正则表达式a b c anything 普通的 Java 属性文件无法处理这个问题 不 请记住 它实际上是
  • 过滤两次 Lambda Java

    我有一个清单如下 1 2 3 4 5 6 7 和 预期结果必须是 1 2 3 4 5 6 7 我知道怎么做才能到7点 我的结果 1 2 3 4 5 6 我也想知道如何输入 7 我添加了i gt i objList size 1到我的过滤器
  • Pig Udf 显示结果

    我是 Pig 的新手 我用 Java 编写了一个 udf 并且包含了一个 System out println 其中的声明 我必须知道在 Pig 中运行时该语句在哪里打印 假设你的UDF 扩展了 EvalFunc 您可以使用从返回的 Log
  • jQuery AJAX 调用 Java 方法

    使用 jQuery AJAX 我们可以调用特定的 JAVA 方法 例如从 Action 类 该 Java 方法返回的数据将用于填充一些 HTML 代码 请告诉我是否可以使用 jQuery 轻松完成此操作 就像在 DWR 中一样 此外 对于
  • java.lang.IllegalStateException:应用程序 PagerAdapter 更改了适配器的内容,而没有调用 PagerAdapter#notifyDataSetChanged android

    我正在尝试使用静态类将值传递给视图 而不是使用意图 因为我必须传递大量数据 有时我会收到此错误 但无法找出主要原因是什么 Error java lang IllegalStateException The application s Pag
  • 将 MOXy 设置为 JAXB 提供程序,而在同一包中没有属性文件

    我正在尝试使用 MOXy 作为我的 JAXB 提供程序 以便将内容编组 解组到 XML JSON 中 我创建了 jaxb properties 文件 内容如下 javax xml bind context factory org eclip
  • Java ResultSet 如何检查是否有结果

    结果集 http java sun com j2se 1 4 2 docs api java sql ResultSet html没有 hasNext 方法 我想检查 resultSet 是否有任何值 这是正确的方法吗 if resultS
  • 如何在谷歌地图android上显示多个标记

    我想在谷歌地图android上显示带有多个标记的位置 问题是当我运行我的应用程序时 它只显示一个位置 标记 这是我的代码 public class koordinatTask extends AsyncTask
  • logcat 中 mSecurityInputMethodService 为 null

    我写了一点android应显示智能手机当前位置 最后已知位置 的应用程序 尽管我复制了示例代码 并尝试了其他几种解决方案 但似乎每次都有相同的错误 我的应用程序由一个按钮组成 按下按钮应该log经度和纬度 但仅对数 mSecurityInp
  • 为什么 Java 8 不允许非公共默认方法?

    让我们举个例子 public interface Testerface default public String example return Hello public class Tester implements Testerface
  • Opencv Java 灰度

    我编写了以下程序 尝试从彩色转换为灰度 Mat newImage Imgcodecs imread q1 jpg Mat image new Mat new Size newImage cols newImage rows CvType C
  • 找不到符号 NOTIFICATION_SERVICE?

    package com test app import android app Notification import android app NotificationManager import android app PendingIn
  • 如何使用mockito模拟构建器

    我有一个建造者 class Builder private String name private String address public Builder setName String name this name name retur
  • 如何将双精度/浮点四舍五入为二进制精度?

    我正在编写对浮点数执行计算的代码的测试 不出所料 结果很少是准确的 我想在计算结果和预期结果之间设置一个容差 我已经证实 在实践中 使用双精度 在对最后两位有效小数进行四舍五入后 结果始终是正确的 但是usually四舍五入最后一位小数后
  • 使用 svn 1.8.x、subclise 1.10 的 m2e-subclipse 连接器在哪里?

    我读到 m2e 的生产商已经停止生产 svn 1 7 以外的任何版本的 m2e 连接器 Tigris 显然已经填补了维护 m2e subclipse 连接器的空缺 Q1 我的问题是 使用 svn 1 8 x 的 eclipse 更新 url
  • 如果没有抽象成员,基类是否应该标记为抽象?

    如果一个类没有抽象成员 可以将其标记为抽象吗 即使没有实际理由直接实例化它 除了单元测试 是的 将不应该实例化的基类显式标记为抽象是合理且有益的 即使在没有抽象方法的情况下也是如此 它强制执行通用准则来使非叶类抽象 它阻止其他程序员创建该类

随机推荐

  • 将iso8601字符串日期时间格式转换为Java中的日期[重复]

    这个问题在这里已经有答案了 All 我知道我之前曾问过类似的问题 关于使用 Java 将 ISO8601 日期字符串解析为日期 但这是使用 SimpleDateFormat 类的更具体的问题 我读过这篇文章维基 ISO8601 日期 htt
  • Qt OpenGL-如何根据鼠标点击获取对象

    我正在尝试在 Qt openGL 中制作应用程序 在这里 我必须根据鼠标单击来了解单击的对象 我的想法是存储点 QWidget 中的对象区域 并将鼠标单击与这些点相匹配 有人能说出如何做到这一点吗 或者任何人都可以展示其他方式吗 这个问题通
  • 单击 Jbutton 后如何显示/隐藏附加到 Jlabel 的图像?

    我是编程世界的新手 我需要一些帮助 我会尽量说得清楚 这是我目前的情况 我正在编写一个简单的游戏 在 Jframe 上 我添加了一个 Jlabel 在其上附加了图像 我还在 Jframe 上添加了一个 Jbutton 我希望当我单击 Jbu
  • 插座对比世界碳纤维

    我开发一个类似聊天的应用程序 在客户端使用 Silverlight 在服务器端使用 wpf 现在通信基于套接字 我有不同的消息类 我将它们序列化并通过 TCP 发送 我开始意识到为每个可能的通信场景创建单独的消息类是相当大的开销 并考虑迁移
  • 这个Python装饰器是如何工作的?

    我正在研究 Python 中的一些延迟加载属性装饰器 并且发生在这个示例中 http code activestate com recipes 363602 lazy property evaluation http code active
  • 将字符串变量中接收到的 pdf 文件转换为 C# 中的字节数组

    我正在尝试用 C 开发一个应用程序 它从 Service1 第 3 方 获取数据 对其进行处理 然后将数据发送到 Service2 又是第 3 方 我试图接收 处理和发送的数据是pdf file 从 Service1 我收到了 pdf 文件
  • AngularJS 指令链接函数未执行

    我正在为 jQuery 元素编写一个包装器 该元素是我正在使用的模板的一部分 此处示例中的链接方法 http jsfiddle net Webnet ugSsk http jsfiddle net Webnet ugSsk 没有被触发 我无
  • 调用需要 API 级别 26(当前最低为 23):java.time.Instant#now

    我正在实施Google 的路线 API https developers google com maps documentation directions start 我的应用程序支持minSdkVersion 23 and java ti
  • 如何在不要求用户登录 Laravel 的情况下验证电子邮件

    我正在开发一个 Laravel 应用程序 我的应用程序使用 Laravel 内置身份验证功能 在 Laravel auth 中 当用户注册时 会发送一封验证电子邮件 当用户验证电子邮件时 单击电子邮件内的链接 如果用户尚未登录 则必须重新登
  • 使用 Python 使用公钥和 cx_Oracle 进行身份验证

    我用谷歌搜索了一下 但没有找到任何实质性的结果 是否可以使用基于密钥的身份验证来使用 Python 连接到 Oracle 服务器 我的目标是能够自动化使用 Python 进行的一些报告 而无需在服务器中的任何位置存储用户名 密码 一种可能的
  • 从大浮点数中删除 E 符号,C#?

    如果您使用过大浮点数 您会发现在 C 中大浮点数显示如下 2000000 2000000 4E 12 我怎样才能展示4E 124 000 000 000 000 不4E 12 You want number ToString N0 N0 是
  • WinRT - 如何从导航历史记录中忽略或删除页面

    我的 WinRT Metro c xaml 应用程序中存在以下情况 用户启动应用程序 但他或她尚未登录 在菜单栏中 我有按钮将其导航到购物车 值得一提的是 无论登录 注销状态如何 他们都可以单击它 所以我有这个 Home Page gt L
  • 输入文件到达时如何启动批处理作业?

    我们有 Spring4 和 Spring Batch 3 我们的应用程序使用 CSV 文件作为输入文件 目前 我们使用 CommandLineJobRunner 和参数 包括要处理的文件的名称 从命令行手动启动作业 我想在输入文件到达受监视
  • opacity:0 与visibility:hidden 的效果完全相同吗

    如果是这样 它是否有效地弃用了visibility财产 我意识到 Internet Explorer 尚不支持此 CSS2 属性 布局引擎的比较 http en wikipedia org wiki Comparison of layout
  • 如何抓取给定时间段内的所有 subreddit 帖子

    我有一个功能可以抓取 2014 年 11 月 1 日到 2015 年 10 月 31 日期间比特币 subreddit 中的所有帖子 然而 我只能提取大约 990 个帖子 这些帖子只能追溯到 10 月 25 日 我不明白发生了什么 我在参考
  • 超时已过。在 Azure sql 上完成操作之前超时时间已过

    我需要在 windows azure 上的 global asax 应用程序启动事件上创建一个 sql 数据库 但是我收到此错误 Timeout expired The timeout period elapsed prior to com
  • 有没有办法查看进程每个核心的 CPU 使用率?

    我知道在 perfmon 中您可以看到每个核心的利用率 以及特定进程使用的总 CPU 量 然而 我似乎无法找到一种方法来查看进程使用了 多少CPU 按核心细分 有没有内置的方法来查看这些信息 有没有一种编程方式可以看到这一点 C 首选 我是
  • 如何在这段代码上应用 PyQt QThread

    coding utf 8 from PyQt5 QtWidgets import from PyQt5 QtCore import from PyQt5 QtGui import from PyQt5 uic import loadUiTy
  • 无法从其他子表单刷新子表单

    我有一个包含多个子表单的表单 当有人更改其中一个子表单的组合框中的值时 它需要刷新另一个子表单 我正在使用这段代码 但它不起作用 Forms frmDispatchPlanningSheet subfrmExtraDriversForPla
  • Java8 Lambda 和异常

    我想知道是否有人可以向我解释以下奇怪的现象 我正在使用 Java 8 更新 11 鉴于这个方法 private