为什么排序(Comparator::reverseOrder)不起作用?

Vij*_*nan 3 java comparator java-8 java-stream

下面的 Stream 表达式工作得很好:

Stream<String> s = Stream.of("yellow","blue", "white");
 s.sorted(Comparator.reverseOrder())
  .forEach(System.out::print);` //yellowwhiteblue
Run Code Online (Sandbox Code Playgroud)

为什么带有方法引用的等效方法无法编译?

s.sorted(Comparator::reverseOrder).forEach(System.out::print);
Run Code Online (Sandbox Code Playgroud)

Comparator 类型没有定义适用于此处的reverseOrder(String, String)

chr*_*ke- 6

方法引用告诉 Java“将此方法视为单一方法接口的实现”——也就是说,方法引用应该具有签名int foo(String,String)并因此实现Comparator<String>

Comparator.reverseOrder()没有——它返回一个Comparator实例。由于sorted正在寻找aComparator因此它可以获取方法调用的结果,但不能将该方法用作接口实现。