这两种 lambda 创建方式有什么区别?为什么第一个不能编译?
Predicate<Integer> predicate = Predicate.isEqual(0).or(Predicate.isEqual(1));
Gives:
error:不兼容的类型: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));
这个有效。
Adding <Integer>
之前isEqual
方法调用应该有帮助:
Predicate<Integer> predicate = Predicate.<Integer>isEqual(0).or(Predicate.isEqual(1));
这种编译器行为背后的原因:
-
isEqual
是一个静态泛型方法,它返回Predicate<T>
(不管它的输入参数的实际类型是什么),所以它返回Predicate<Object>
调用方法时未显式指定返回类型。
-
or
也是一个静态泛型方法,但它返回一个由相同类型参数化的谓词作为其输入参数(即Predicate<Object>
).
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)