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

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

interface ExtendedStream extends Stream {

R1 collect(SerializableSupplier> supplier);

}

SerializableSupplier定义为:

interface SerializableSupplier extends Serializable, Supplier {

}

使用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> cannot be converted to java.util.stream.Collector super java.util.Map.Entry,?,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::> toList);

标签:java,java-8,method-reference,generics

来源: https://codeday.me/bug/20190522/1153674.html

你可能感兴趣的:(java引用和lambda)