为什么
Predicate<? super Integer> isGreaterThanZero = num -> num.intValue() > 0;
Run Code Online (Sandbox Code Playgroud)
效劳于
isGreaterThanZero.test( new Integer( 2 ));
Run Code Online (Sandbox Code Playgroud)
并不是
Predicate<? extends Number> isGreaterThanZero = num -> num.intValue() > 0;
Run Code Online (Sandbox Code Playgroud)
我认为它们是相同的,因为它Integer 是-a Number
Mis*_*sha 13
当您声明时Predicate<? extends Number> isGreaterThanZero,您告诉编译器isGreaterThanZero是Predicate由某个未知子类型参数化的Number.
就编译器而言,它可以是a Predicate<Double>或a Predicate<BigInteger>.你能安全地Integer去往test(Double x)或去test(BigInteger x)吗?你不能.唯一可以安全传递给test方法的Predicate<? extends Number>是null.
如果你想isGreaterThanZero成为一个适用于任何子类型的谓词Number,你应该声明它Predicate<Number>.
| 归档时间: |
|
| 查看次数: |
260 次 |
| 最近记录: |