Integer extends Number 但不能对 <?扩展 Number> 为 Integer
Integer extends Number but can't operate on <? extends Number> with Integer
Integer extends Number 那么为什么我会在底部出现错误?
interface Predicate<T> {
public abstract boolean check(T t);
}
Predicate<? extends Number> predUpper = null;
predUpper.check(new Integer(73));
错误:Predicate 类型中的方法 check(capture#6-of ? extends Number) 不适用于参数 (Integer)
我已阅读:Method in the type Map<String,capture#1-of ? extends Object> is not applicable and Difference between <? super T> and <? extends T> in Java
由于 Predicate
将 消耗 Integer
,您应该这样做:
Predicate<? super Integer> predUpper //Solution 1
或者只是:
Predicate<Number> predUpper //Solution 2
但是,这些方法存在差异:
来自 "Solition 1" 的类型参数 <? super Integer
表示 整个家族 Integer
的超类型(包括 Integer
).
来自 "Solution 2" 的类型参数 <Number>
表示 Number
接口的子 class。既然Integer
是这样的,这里就适用了。
更多信息:
- What is PECS?
Integer extends Number 那么为什么我会在底部出现错误?
interface Predicate<T> {
public abstract boolean check(T t);
}
Predicate<? extends Number> predUpper = null;
predUpper.check(new Integer(73));
错误:Predicate 类型中的方法 check(capture#6-of ? extends Number) 不适用于参数 (Integer)
我已阅读:Method in the type Map<String,capture#1-of ? extends Object> is not applicable and Difference between <? super T> and <? extends T> in Java
由于 Predicate
将 消耗 Integer
,您应该这样做:
Predicate<? super Integer> predUpper //Solution 1
或者只是:
Predicate<Number> predUpper //Solution 2
但是,这些方法存在差异:
来自 "Solition 1" 的类型参数
<? super Integer
表示 整个家族Integer
的超类型(包括Integer
).来自 "Solution 2" 的类型参数
<Number>
表示Number
接口的子 class。既然Integer
是这样的,这里就适用了。
更多信息:
- What is PECS?