lambda 表达式中的返回类型错误

2024-02-06

以下代码在 IntelliJ 和 Eclipse 中可以正常编译,但 JDK 编译器 1.8.0_25 会报错。首先,代码。

import java.util.function.Predicate;

public abstract class MyStream<E> {

  static <T> MyStream<T> create() {
    return null;
  }

  abstract MyStream<E> filter(MyPredicate<? super E> predicate);

  public interface MyPredicate<T> extends Predicate<T> {

    @Override
    boolean test(T t);
  }

  public void demo() {
    MyStream.<Boolean> create().filter(b -> b);
    MyStream.<String> create().filter(s -> s != null);
  }
}

javac 1.8.0_25 的输出是:

MyStream.java:18: error: incompatible types: incompatible parameter types in lambda expression
    MyStream.<Boolean> create().filter(b -> b);
                                       ^
MyStream.java:18: error: incompatible types: bad return type in lambda expression
    MyStream.<Boolean> create().filter(b -> b);
                                            ^
    ? super Boolean cannot be converted to boolean
MyStream.java:19: error: bad operand types for binary operator '!='
    MyStream.<String> create().filter(s -> s != null);
                                             ^
  first type:  ? super String
  second type: <null>
MyStream.java:19: error: incompatible types: incompatible parameter types in lambda expression
    MyStream.<String> create().filter(s -> s != null);
                                      ^
Note: Some messages have been simplified; recompile with -Xdiags:verbose to get full output
4 errors

当我更换时? super E简单地E,JDK编译成功。

当我更换时filter(MyPredicate with filter(Predicate,JDK编译成功。

由于它适用于 JDK 1.8.0_60,我怀疑这是一个编译器错误。

有关造成此问题的原因以及何时修复的详细信息吗?


如果 lambda 表达式出现在带有通配符的目标类型中(在大多数情况下)

  Consumer<? super Boolean> consumer = b->{...}

问题出现了 - lambda 表达式的类型是什么;特别是,类型b.

当然,由于通配符的存在,可能会有很多选择;例如我们可以明确选择

  Consumer<? super Boolean> consumer = (Object b)->{...}

然而,隐含地,b应该推断为Boolean。这是有道理的,因为消费者应该只吃Boolean反正。

http://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.27.3 http://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.27.3

如果 T 是通配符参数化函数接口类型并且 lambda 表达式是隐式类型的,则基本目标类型是 T 的非通配符参数化

(这可能假设通配符在目标类型上正确使用方差;如果假设不成立,我们可能会发现一些搞笑的例子)

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

lambda 表达式中的返回类型错误 的相关文章

  • Java-线程与CPU的关系

    我对多线程还很陌生 我正在开发一个项目 尝试在我的 Java 程序中使用 4 个 CPU 我想做类似的事情 int numProcessors Runtime getRuntime availableProcessors ExecutorS
  • 如何从 WifiP2pDeviceList 获取 wifi direct 设备名称

    我想在执行请求对等点时获取 wi fi direct 名称 这是我的代码 if WifiP2pManager WIFI P2P PEERS CHANGED ACTION equals action Log d tag success dis
  • 如何在Java 8中实现Elvis运算符?

    我有一个经典的 Elvis 运算符 案例 其中我调用每个可能返回 null 的方法并将它们链接在一起 thing nullableMethod1 a nullableMethod2 b nullableMethod3 在 Java 8 中
  • 在Java中清空数组/处理

    除了循环遍历数组中的每个元素并将每个元素设置为 null 之外 Java 处理中是否有一个本机函数可以简单地清空数组 或销毁它 以便能够将其重新声明为新数组 There s Arrays fill myArray null 并不是说它执行的
  • 在 IntelliJ 上进行 Google App Engine Java 开发?

    令人烦恼的是 Google App Engine 已成为其中的另一个项目 他们只发布 Eclipse 插件 如 Spring Webflow 而我更喜欢 IntelliJ 你能用IntelliJ成功运行本地测试环境吗 并调试 部署本地或实时
  • 如何测试调用父类的受保护(不需要的)方法的方法?

    我陷入了一个非常奇怪的情况 我有一些需要测试的特定代码 这里是 public class A The real method of real class is so big that I just don t want to test it
  • 使用除 SINGLE_TABLE 之外的任何其他 Hibernate 继承策略时 JVM 崩溃

    好吧 这可能不太可能 但还是这样吧 在Java JRE 1 6 0 26 b03 中我有两个类 SuperControl及其子类SubControl 它们都需要是持久对象 我正在使用 Hibernate Annotations 来实现这一点
  • @OneToMany 与 @JoinTable 错误

    我试图理解 OneToMany with JoinTable 对于这样的场景 我正在使用 JPA 2 1 Hibernate 5 0 4 和 Oracle 11 XE 当我打电话时userDao save user 下面的代码 我有 jav
  • firebase推送通知错误Spring Boot服务器端

    我正在尝试从 Spring Boot 服务器端发送通知到客户端 android 服务器运行良好 一切都很好 2020 09 01 08 13 07 691 INFO 18941 restartedMain e DevToolsPropert
  • RSA SignatureException:签名长度不正确

    我在签署 rsa 签名时遇到问题 我有一个用私钥加密的签名 然而 当我尝试使用公钥验证它时遇到问题 我得到以下异常 java security SignatureException Signature length not correct
  • 正确使用 JDBC 连接池 (Glassfish)

    我需要在 Java Web 服务中作为会话 bean 实现数据库连接 但我不确定我这样做是否正确 我创建了一个类 public final class SQLUtils private static DataSource m ds null
  • Java 唤醒休眠线程

    我阅读了其他帖子 但没有找到我正在寻找的确切答案 所以我希望有人能给出一些澄清 我有一个将运行一段时间的程序 我有一些在后台运行的线程来执行各种任务 为了简单起见 让我们考虑 3 个线程 ThreadA每 10 秒执行一次任务 其中Thre
  • 在 eclipse 之外将 Spring MVC 应用程序部署到 tomcat 的幕后会发生什么?

    我猜想使用像 eclipse 这样很棒的 IDE 的一个缺点是你会忽略应用程序幕后发生的事情 我是一名 Ruby 开发人员 所以不是一名 Java 老手 所以我一直在用 java 编写一个项目 并使用 spring 框架进行 IOC 和 M
  • 如何从 Google Custom Search API 获取超过 100 个结果

    我正在尝试使用 Google Custom Search API 在 Java 中进行研究 因此 我需要为每个查询提供一个大的结果集 然而 我似乎仅限于前 100 个结果 这比我需要的要少得多 我使用这样的列表方法 list setStar
  • 如何使用 Guava 连接字符串?

    我写了一些代码来连接字符串 String inputFile for String inputLine list inputFile inputLine trim 但我不能使用 连接 所以我决定使用 Guava 所以我需要使用Joiner
  • 读/写带有特殊字符的.txt文件

    I open Notepad Windows 并写 Some lines with special characters Special 并前往另存为 someFile txt 与Encoding set to UTF 8 在Java中我有
  • Selenium - 等待网络流量

    我们将 Selenium 与 Java API 和一些 Javascript 用户扩展一起使用 我们在应用程序中使用了大量 AJAX 调用 我们的许多测试随机失败 因为有时 AJAX 调用完成得比其他时候慢 因此页面未完全加载 我们通过等待
  • Google Cloud Messaging - 立即收到或长时间延迟收到的消息

    我在大学最后一年的项目中使用谷歌云消息传递 一切正常 但我在使用 GCM 时遇到了一些麻烦 通常 消息要么几乎立即传递 要么有很大的延迟 我读过这篇文章 但我真的认为它不适用于这种情况 GCM 通常会在消息发送后立即传送消息 然而 这并不总
  • 编写自定义 Eclipse 调试器

    EDIT 一定有某种方法可以解决这个问题 而无需编写全新的调试器 我目前正在研究在现有 java 调试器之上构建的方法 如果有人对如何获取 Java 调试器已有的信息 有关堆栈帧 变量 原始数据等 有任何想法 那将非常有帮助 我想要做的是我
  • Integer.parseInt 引发的 NumberFormatException

    嘿 我在学校上编码课 但老师没有很好地解释 所以我们必须在网上查找我所做的信息 但我无法找到代码中的错误 你能帮我吗 char end s do System out println Tipo de boleto char boleto c

随机推荐

  • 网站要求在 MVC 控制器上“需要身份验证”,但不要求在其他控制器上进行“身份验证”

    我有一个 asp net C MVC 网站 它使用 SimpleAuthentication 和表单身份验证 一切正常 需要人们登录才能访问页面 但是 我有一个名为 ReportsController 的控制器 每当您访问此控制器中操作的
  • 如何使用 lambda 函数更改 pandas df 中任意列的名称?

    有没有办法使用更改 pandas 数据框中的某些列名称lambda 但不是所有的 例如 假设该数据框的列名称为osx centos ubunto windows 在此数据框中 我想将所有列名称替换为附加的列名称x 所以在这种情况下 我可以通
  • 为什么我在 iOS 8 模拟器上收到这个 clang 错误:_fwrite$UNIX2003

    我已将新的 iOS 8 下载到我的手机中 并将最新的 Xcode 下载到我的 Mac 上 一切正常 但在加载并尝试新的 iPhone 6 plus 模拟器后 当我尝试 iPhone 4s 或 5 模拟器 适用于 5s 时 出现以下错误 Un
  • 如何处理 Elastic beanstalk 部署,使其仅上传更改的文件

    由于我是 AWS 新手 因此我在使用 Elastic beanstalk 时遇到了问题 我设置了一切并部署了第一个应用程序 到目前为止一切顺利 但是当我推送另一堆更改时 它只是替换了整个文件 而不仅仅是更改了的文件 在开发过程中 本地主机和
  • 我无法通过鼠标事件添加灯光

    我无法在 Three js 场景中使用 keydown 事件添加灯光 我有以下功能 function putLight light new THREE SpotLight 0xffffff light position set 10 80
  • osmdroid MapTileDownloader 现在显示 403 禁止作为 HTTP 响应

    我已经成功使用 osmdroid android 4 1 jar 一段时间来在我的应用程序中显示 OSM 地图图块 现在 从昨天开始 我根本没有显示任何图块 当我将手机连接到 PC 时 我在日志中看到 403 禁止响应 我使用 Androi
  • 使用 CSS 使图像大小为容器高度的 100%

    我环顾四周 阅读了一个又一个的解决方案 并尝试了各种方法 但从未让它正常工作 我希望图像最终根据浏览器窗口的当前高度动态调整大小 目前使用图像下方的代码是原始高度 最终比浏览器窗口大 导致出现垂直滚动条 注意 请记住 我希望使用相同数量的表
  • 为什么使用 IN(子查询)的查询比使用 IN(离散列表)的查询花费更长的时间

    这一直困扰着我 为什么这个查询 SELECT FROM TABLE WHERE value IN SELECT val FROM OTHER TABLE WHERE date lt 2014 01 01 运行速度比顺序运行此查询慢几个数量级
  • bash脚本..复制文件而不覆盖[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我想知道是否可以根据原始名称将文件复制 移动到目的地 基本上 我有一个 mail 文件夹 其中有几个子文件夹 例如 cur 和 new 等 然后我在
  • 计算 PHP 类的创建次数

    我有一个 php 类 我为其创建了多个实例 我想计算一下我创建该对象的次数 有没有办法知道我已经创建了 3 个 myObjects 您可以创建一个static http php net manual en language oop5 sta
  • 无法安装自制程序

    我有一台相当新的 macbook pro 我只是尝试按照他们网站上的说明安装自制程序 usr bin ruby e curl fsSL https raw githubusercontent com Homebrew install mas
  • NSString 属性是复制还是只读?

    我看到很多讨论说我应该使用copyNSString 属性 因为它会阻止其他人在我背后更改它 但那我们为什么不直接设置readonly财产呢 Update 谢谢回答我的问题 但问题是 对于 NSString 属性 你总是不希望别人修改它 对吧
  • Swift UITableViewAutomaticDimension 不起作用

    我的 Swift 项目中有一张这样的表 var tableView UITableView tableView UITableView tableView dataSource self tableView delegate self ta
  • 如何在android中的通知中添加按钮?

    我的应用程序播放音乐 当用户通过从屏幕顶部 或通常从平板电脑屏幕的右下角 滑动打开通知屏幕时 我想向他们展示一个按钮来停止当前播放的音乐并在以下情况下重新启动 他们要 我不打算将小部件放在用户的主屏幕上 而只是放在通知中 我怎样才能做到这一
  • 如何使用无法删除的值初始化输入,但允许用户在输入后写入

    我正在使用 Angularjs 和 bootstrap 创建一些表单 我想使用无法删除的默认值来初始化输入 我不想使输入只读或禁用它 我想用一些无法删除的文本初始化输入 但让用户在该文本后写入 Example 代码 xyz 用户想要写入的任
  • 在新版本的 matplotlib 中使用 twinx 时定义宽高比

    当前版本的 matplotlib 不允许box forced再说了 我应该怎么做同样的事情answer https stackoverflow com a 24742133 11840592 我正在使用 matplotlib 3 1 0 当
  • 如何在CSS中倾斜虚线边框?

    我正在尝试使用 CSS 为邮件应用程序设计一个信封 我的客户想要这种方式的虚线边框 如何用 CSS 边框达到这种效果 您可能需要稍微调整一下颜色 enveloppe padding 1em border 16px solid transpa
  • 在 Storybook v6.4 中加载 css 模块类时出现问题

    我在让故事书与我的 Gatsby 项目中的 css 模块完美配合时遇到问题 我能够渲染按钮组件 但它没有添加任何我的样式 在检查元素时 我只得到undefined undefined从下面的代码 按钮 jsx import React fr
  • 如何关闭 Nifi 处理器计划

    我有 GetHttp 和 InvokeHttp Nifi 处理器 它们在 Nifi 中启动流 但我希望它们仅从 URL 获取一次并将数据传递到下一个进程 使用处理器配置 我无法关闭调度 如何实现这一点 Apache NiFi 处理器和流程专
  • lambda 表达式中的返回类型错误

    以下代码在 IntelliJ 和 Eclipse 中可以正常编译 但 JDK 编译器 1 8 0 25 会报错 首先 代码 import java util function Predicate public abstract class