Java编译因方法引用而失败,但与lambda一起使用
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java编译因方法引用而失败,但与lambda一起使用,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1409字,纯文字阅读大概需要3分钟。
内容图文
![Java编译因方法引用而失败,但与lambda一起使用](/upload/InfoBanner/zyjiaocheng/822/e4fa98304b2d40bc8c639212dc525c9b.jpg)
我们正在尝试向我们目前定义的扩展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编译因方法引用而失败,但与lambda一起使用全部内容,希望文章能够帮你解决Java编译因方法引用而失败,但与lambda一起使用所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。