【发布时间】:2019-03-15 19:23:56
【问题描述】:
这是我的第一个代码:
public class MethodReference {
public static void main (String []args) {
Stream<String> s = Stream.of("brown bear", "grizzly");
s.sorted(Comparator.reverseOrder()).forEach(System.out::print);
//...
}
}
结果:灰棕熊
这是我的第二个代码:
public class MethodReference {
public static void main (String []args) {
Stream<String> s = Stream.of("brown bear", "grizzly");
s.sorted(Comparator::reverseOrder()).forEach(System.out::print);
//...
}
}
结果:编译器错误
我的问题: 为什么第二个代码中有编译器错误? 功能接口的静态方法不能使用方法引用吗?
我知道我不能将方法引用与功能接口的默认方法一起使用。 我知道我可以在 5 种情况下对类使用方法引用:
类
类::staticMethod
类::instanceMethod
instance::instanceMethod
类::新
功能界面
- 接口::abstractMethod
非常感谢!
【问题讨论】:
-
Comparator::reverseOrder() - 这在你的第二个代码 sn-p 中可能是错误的
-
Comparator::reverseOrder()方法引用没有括号 - 永远 -
你需要研究一下方法参考是什么。
-
I know I can't use method reference with default method of functional interface。这是错误的。你可以有即Function::andThen,其中Function是一个功能接口,andThen是一个默认方法。
标签: java lambda method-reference