Gal*_*eño 5 java generics java-8 method-reference
我们正在尝试向collect我们目前定义的扩展Java Stream API 添加重载方法:
interface ExtendedStream<R> extends Stream<R> {
<R1> R1 collect(SerializableSupplier<Collector<? super R, ?, R1>> supplier);
}
Run Code Online (Sandbox Code Playgroud)
SerializableSupplier 被定义为:
interface SerializableSupplier<T> extends Serializable, Supplier<T> {
}
Run Code Online (Sandbox Code Playgroud)
使用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>)
Run Code Online (Sandbox Code Playgroud)
我在这里创建了一个独立的Java类,您可以将其加载到编译器中以进行尝试.
我目前正在使用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)
Run Code Online (Sandbox Code Playgroud)
这是我们如何定义事物的错误或错误吗?
注意:我从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);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2407 次 |
| 最近记录: |