我发现了一个有趣的使用Stream API的示例:
Stream<String> stream = Stream.of("w", "o", "l", "f");
BiConsumer<StringBuilder, String> append = StringBuilder::append;
StringBuilder collected = stream.collect(StringBuilder::new, append, StringBuilder::append);
System.out.println(collected); //it works correctly
Stream.collect需要三个参数:
Supplier<R> supplier, BiConsumer<R, ? super T> accumulator, BiConsumer<R, R> combiner
BiConsumer接受两个参数,不返回任何内容。为什么这行代码编译并且可以正常工作?
BiConsumer<StringBuilder, String> append = StringBuilder::append;
StringBuilder没有名为append(java.lang.StringBuilder, java.lang.String)的无返回值方法。
StringBuilder.append(String)
确实存在。 - Tunakithis
的静态函数没有什么不同。每当您看到ClassName::memberFunction
时,第一个参数始终为ClassName this
。 - Hank D