ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java编译因方法引用而失败,但与lambda一起使用

2019-05-22 19:48:54  阅读:1001  来源: 互联网

标签:java java-8 method-reference generics


我们正在尝试向我们目前定义的扩展Java Stream API添加一个重载的collect方法:

interface ExtendedStream<R> extends Stream<R> {

   <R1> R1 collect(SerializableSupplier<Collector<? super R, ?, R1>> supplier);

}

SerializableSupplier定义为:

interface SerializableSupplier<T> extends Serializable, Supplier<T> {
}

使用lambda调用此collect方法工作正常,但使用方法引用调用它无法编译时出现以下错误:

Error:(50, 72) java: incompatible types: cannot infer type-variable(s) R1,capture#1 of ?,T
    (argument mismatch; bad return type in method reference
      java.util.stream.Collector<T,capture#1 of ?,java.util.List<T>> cannot be converted to java.util.stream.Collector<? super java.util.Map.Entry<java.lang.Integer,java.lang.String>,?,R1>)

我已经创建了一个独立的Java类here,您可以将其加载到编译器中以进行尝试.

我目前正在使用Java版本:

java version "1.8.0_144"
Java(TM) SE Runtime Environment (build 1.8.0_144-b01)
Java HotSpot(TM) 64-Bit Server VM (build 25.144-b01, mixed mode)

这是我们如何定义事物的错误或错误吗?

注意:我从IntelliJ和使用Maven编译时都会收到此编译错误.我不使用Eclipse.

干杯,
盖尔德

解决方法:

这是javac 8中的一个错误,因为它与javac-9(使用最新版本)编译得很好 – 我只是找不到它而且我真的很想尝试.

几乎像往常一样添加更多类型信息修复这样的事情……还要注意我已经将Comparator更改为Comparator.comparingInt …:

 return entrySet.stream().sorted(
            Comparator.comparingInt(Entry::getKey)).collect(
                    Collectors::<Map.Entry<Integer, String>> toList); 

标签:java,java-8,method-reference,generics
来源: https://codeday.me/bug/20190522/1153674.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有