dan*_*iel 6 java generics lambda currying java-8
这两种lambda创造方式有什么区别?为什么不编译第一个?
Predicate<Integer> predicate = Predicate.isEqual(0).or(Predicate.isEqual(1));
Run Code Online (Sandbox Code Playgroud)
给出:
错误:不兼容的类型:Predicate<Object>无法转换为Predicate<Integer> = Predicate.isEqual(0).or(Predicate.isEqual(1));
Predicate<Integer> pred21 = Predicate.isEqual(0);
Predicate<Integer> pred22 = pred21.or(Predicate.isEqual(1));
Run Code Online (Sandbox Code Playgroud)
这个工作.
<Integer>在isEqual方法调用之前添加应该有帮助:
Predicate<Integer> predicate = Predicate.<Integer>isEqual(0).or(Predicate.isEqual(1));
Run Code Online (Sandbox Code Playgroud)
这种编译器行为背后的原因:
isEqual是一个静态泛型方法,它返回Predicate<T>(无论其输入参数的实际类型是什么),因此它Predicate<Object>在调用方法时返回,而不显式指定返回类型.or也是一个静态泛型方法,但它返回一个由相同类型参数化的谓词,作为其输入参数(即Predicate<Object>).| 归档时间: |
|
| 查看次数: |
149 次 |
| 最近记录: |