为什么这个 Java 8 lambda 无法编译?

2024-02-03

以下 Java 代码无法编译:

@FunctionalInterface
private interface BiConsumer<A, B> {
    void accept(A a, B b);
}

private static void takeBiConsumer(BiConsumer<String, String> bc) { }

public static void main(String[] args) {
    takeBiConsumer((String s1, String s2) -> new String("hi")); // OK
    takeBiConsumer((String s1, String s2) -> "hi"); // Error
}

编译器报告:

Error:(31, 58) java: incompatible types: bad return type in lambda expression
    java.lang.String cannot be converted to void

奇怪的是,标记为“OK”的行编译正常,但标记为“Error”的行编译失败。它们看起来本质上是相同的。


你的 lambda 需要与BiConsumer<String, String>。如果您参考JLS #15.27.3(Lambda 类型) http://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.27.3:

如果满足以下所有条件,则 lambda 表达式与函数类型一致:

  • [...]
  • 如果函数类型的结果为 void,则 lambda 主体是语句表达式(第 14.8 节)或与 void 兼容的块。

因此 lambda 必须是语句表达式或 void 兼容块:

  • 构造函数调用是语句表达式 http://docs.oracle.com/javase/specs/jls/se8/html/jls-14.html#jls-14.8所以它可以编译。
  • 字符串文字不是语句表达式,并且不兼容 void(参见15.27.2 中的示例 http://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.27.2-230)所以它无法编译。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么这个 Java 8 lambda 无法编译? 的相关文章

  • 如何使用 Java 和 Selenium WebDriver 在 C 目录中创建文件夹并需要将屏幕截图保存在该目录中?

    目前正在与硒网络驱动程序和代码Java 我有一种情况 我需要在 C 目录中创建一个文件夹 并在该文件夹中创建我通过 selenium Web 驱动程序代码拍摄的屏幕截图 它需要存储在带有时间戳的文件夹中 如果我每天按计划运行脚本 所有屏幕截
  • Java - 将节点添加到列表的末尾?

    这是我所拥有的 public class Node Object data Node next Node Object data Node next this data data this next next public Object g
  • Java JDBC:更改表

    我希望对此表进行以下修改 添加 状态列 varchar 20 日期列 时间戳 我不确定该怎么做 String createTable Create table aircraft aircraftNumber int airLineCompa
  • JAXb、Hibernate 和 beans

    目前我正在开发一个使用 Spring Web 服务 hibernate 和 JAXb 的项目 1 我已经使用IDE hibernate代码生成 生成了hibernate bean 2 另外 我已经使用maven编译器生成了jaxb bean
  • 未捕获 Func<> 的异常(异步)

    我有以下代码 为了进行此重现而进行了简化 显然 catch 异常块将包含更多逻辑 我有以下代码 void Main var result ExecuteAction async gt Will contain real async code
  • Android MediaExtractor seek() 对 MP3 音频文件的准确性

    我在使用 Android 时无法在eek 上获得合理的准确度MediaExtractor 对于某些文件 例如this one http www archive org download emma solo librivox emma 01
  • 反射找不到对象子类型

    我试图通过使用反射来获取包中的所有类 当我使用具体类的代码 本例中为 A 时 它可以工作并打印子类信息 B 扩展 A 因此它打印 B 信息 但是当我将它与对象类一起使用时 它不起作用 我该如何修复它 这段代码的工作原理 Reflection
  • Spring Data JPA 应用排序、分页以及 where 子句

    我目前正在使用 Spring JPA 并利用此处所述的排序和分页 如何通过Spring data JPA通过排序和可分页查询数据 https stackoverflow com questions 10527124 how to query
  • 路径中 File.separator 和斜杠之间的区别

    使用有什么区别File separator和一个正常的 在 Java 路径字符串中 与双反斜杠相反 平台独立性似乎不是原因 因为两个版本都可以在 Windows 和 Unix 下运行 public class SlashTest Test
  • 如何在PreferenceActivity中添加工具栏

    我已经使用首选项创建了应用程序设置 但我注意到 我的 PreferenceActivity 中没有工具栏 如何将工具栏添加到我的 PreferenceActivity 中 My code 我的 pref xml
  • 禁止的软件包名称:java

    我尝试从数据库名称为 jaane 用户名 Hello 和密码 hello 获取数据 错误 java lang SecurityException Prohibited package name java at java lang Class
  • Java按日期升序对列表对象进行排序[重复]

    这个问题在这里已经有答案了 我想按一个参数对对象列表进行排序 其日期格式为 YYYY MM DD HH mm 按升序排列 我找不到正确的解决方案 在 python 中使用 lambda 很容易对其进行排序 但在 Java 中我遇到了问题 f
  • 在两个活动之间传输数据[重复]

    这个问题在这里已经有答案了 我正在尝试在两个不同的活动之间发送和接收数据 我在这个网站上看到了一些其他问题 但没有任何问题涉及保留头等舱的状态 例如 如果我想从 A 类发送一个整数 X 到 B 类 然后对整数 X 进行一些操作 然后将其发送
  • 无法捆绑适用于 Mac 的 Java 应用程序 1.8

    我正在尝试将我的 Java 应用程序导出到 Mac 该应用程序基于编译器合规级别 1 7 我尝试了不同的方法来捆绑应用程序 1 日食 我可以用来在 Eclipse 上导出的最新 JVM 版本是 1 6 2 马文 看来Maven上也存在同样的
  • Android 中麦克风的后台访问

    是否可以通过 Android 手机上的后台应用程序 服务 持续监控麦克风 我想做的一些想法 不断聆听背景中的声音信号 收到 有趣的 音频信号后 执行一些网络操作 如果前台应用程序需要的话 后台应用程序必须能够智能地放弃对麦克风的访问 除非可
  • 声明的包“”与预期的包不匹配

    我可以编译并运行我的代码 但 VSCode 中始终显示错误 早些时候有一个弹出窗口 我不记得是什么了 我点击了 全局应用 从那以后一直是这样 Output is there but so is the error The declared
  • Firebase 添加新节点

    如何将这些节点放入用户节点中 并创建另一个节点来存储帖子 我的数据库参考 databaseReference child user getUid setValue userInformations 您需要使用以下代码 databaseRef
  • 捕获的图像分辨率太大

    我在做什么 我允许用户捕获图像 将其存储到 SD 卡中并上传到服务器 但捕获图像的分辨率为宽度 4608 像素和高度 2592 像素 现在我想要什么 如何在不影响质量的情况下获得小分辨率图像 例如我可以获取或设置捕获的图像分辨率为原始图像分
  • 有没有办法为Java的字符集名称添加别名

    我收到一个异常 埋藏在第 3 方库中 消息如下 java io UnsupportedEncodingException BIG 5 我认为发生这种情况是因为 Java 没有定义这个名称java nio charset Charset Ch
  • java.lang.IllegalStateException:驱动程序可执行文件的路径必须由 webdriver.chrome.driver 系统属性设置 - Similiar 不回答

    尝试学习 Selenium 我打开了类似的问题 但似乎没有任何帮助 我的代码 package seleniumPractice import org openqa selenium WebDriver import org openqa s

随机推荐

  • Eclipse - 在不明确的导入上自动导入 java.util 类

    有没有办法 Eclipse 可以自动导入 https stackoverflow com questions 3982885 can eclipse be configured to automatically fix missing im
  • 从 Firebase Promise 分派操作后,ngrx 商店不更新 UI

    我正在尝试使用 Angular 4 开发一个基本的 NativeScript 应用程序 我还使用 ngrx 存储和 firebase 作为实时数据库 当我使用示例数组并更新存储而不与 firebase 集成时 程序工作正常 UI 也得到更新
  • 在 Tkinter python 中相对于父窗口放置子窗口

    我有一个包含按钮的父小部件 当按下按钮时 我想在与其左侧对齐的父窗口小部件正下方打开一个无边框 即没有 Windows 装饰按钮 窗口 我很困惑 似乎 设置窗口位置的唯一方法是使用 geometry 但更糟糕的是 我似乎无法获得父小部件的绝
  • 在 Windows 中为 Docker 容器增加 GB 的 RAM

    我正在关注这个教程https docs docker com docker for windows docker settings dialog https docs docker com docker for windows docker
  • 如何从本地路径ios swift加载图像(按路径)

    在我的应用程序中 我将图像存储在本地存储中 并将该图像的路径保存在数据库中 如何从该路径加载图像 这是我用来保存图像的代码 let myimage UIImage UIImage data data let fileManager NSFi
  • jQuery mobile:如何调用此(默认)错误加载页面消息?

    我正在构建 RESTful 移动应用程序 我喜欢找不到资源时的默认行为 jQuery Mobile 显示了这一点 但是 当我在 onError 中执行自定义 AJAX 时 因为未找到资源 我想显示奇特的消息 但是 我的代码中没有任何反应 默
  • bigtable、cassandra、simpledb、dynamo、couchdb、hypertable、riak、hbase,它们有什么共同点?

    抱歉 如果这个问题有点主观 我对 可以存储 分布式存储 或类似的概念很陌生 我真的很想知道它们有什么共同点 并希望对它们有一个总体的了解 如果我想写一个类似这样的产品 我需要准备什么 The NoSQL 数据库站点 http nosql d
  • 无法更新或安装包:已添加具有相同密钥的项目

    Problem 在特定项目中 我无法更新或安装任何 NuGet 包 当我尝试使用 NuGet GUI 执行此操作时 它会执行一些操作 然后停止运行 什么也不说 当我尝试使用包管理器控制台执行此操作时 我得到以下输出 PM gt Update
  • Julia 0.6中不同类型词典的向量

    我对新的有点困惑whereJulia 0 6 中的语法 我有这样的事情 a Dict a gt b b Dict a gt 3 c Dict a gt c 我想要一个接收字典向量而无需进行显式转换的函数 我尝试过 function bbb
  • 将 jQuery fullcalendar 集成到 PHP 网站中

    我想将 jQuery fullcalendar 集成到我的 PHP 网站中 但我不知道如何处理该事件以及如何使用 MySQL 中的 JSON 数据 任何意见 将不胜感激 确保你的 PHP 可以输出 f以下 HTML 代码 http docs
  • 在项目中使用 Node.js 作为独立的 LESS 编译器?

    我一直在尝试将lessc https github com cloudhead less js tree master bin在一个大型项目中使用 Bootstrap 进行基本设置的编译器 只会导致各种编译错误 每个人都有不同解决方案的票证
  • 服务上的 AccessViolationException

    我正在运行一项服务 该服务连接到一些客户端 它已经启动并运行了几周 这个函数每分钟都会被调用很多次 我在不同的函数中有一些捕获 但是这个异常使它一路崩溃 我以前从未见过这个问题 谁能让这一切发生 Stack Framework Versio
  • 资源与 SQLite

    我正在尝试分析对于需要附带相当大量文本 几本书 的应用程序使用 SQLite 与使用资源之间的权衡 我读了这篇关于原始 XML 文件与 SQLite 的文章 https stackoverflow com questions 5213550
  • 使用 Capistrano 的 Git 工作流程

    我正在尝试使用 capistrano 来了解一个良好的 git 工作流程 我找到了一个few http nakedstartup com 2010 04 simple daily git workflow good http reinh c
  • 如何生成 AdWords API 脚本的 USER_AGENT

    生成 USER AGENT 以使用 Python 从 AdWords API 提取数据的最有效方法是什么 该值是我需要能够提取数据的最后一个值 任何帮助将不胜感激 user agent INSERT USER AGENT HERE 值得庆幸
  • SublimeText 片段的正则表达式

    我现在已经在这个 Sublime Snippet 上停留了一段时间了 我想在创建新类时显示正确的包名称 使用TM FILEPATH and TM FILENAME 打印时TM FILEPATH变量 我得到这样的东西 Users caubry
  • 一个小游戏/测验:你看到我的价值观了吗? (解释十六进制值)

    好的 我需要一些帮助 我有一个蓝牙体重秤 我可以将我的 Raspberry Pi 连接到该秤并获取一些数据 但对我来说 在这个六角沙拉中读懂我的价值观并不容易 每次测量后 我都会得到两行信息 其中应包含我的值 我模拟了所有测量结果 第5个人
  • 错误:未定义模板 'llvm::yaml::MissingTrait 的隐式实例化

    我正在开发一个使用 LLVM YAML I O 库的项目 这是我正在遵循的文档 教程 https www llvm org docs YamlIO html https www llvm org docs YamlIO html 我正在尝试
  • OSX - 通过缩放按钮禁用全屏模式?

    我正在寻找以下任一设置选项NSWindow在 XIB 编辑器中或通过编程方式我可以禁用全屏模式特色于OS X当用户单击缩放按钮 绿色交通灯 时 因为它不适合我的 UI 设计 相反 将其用于正常的窗口缩放 任何人都可以给我一些提示 去哪里寻找
  • 为什么这个 Java 8 lambda 无法编译?

    以下 Java 代码无法编译 FunctionalInterface private interface BiConsumer