整数扩展数字,为什么我在底部得到错误?
interface Predicate<T> {
public abstract boolean check(T t);
}
Predicate<? extends Number> predUpper = null;
predUpper.check(new Integer(73));
错误:谓词类型中的方法检查(捕获#6-of?extends Number)不适用于参数(整数)
我已阅读:Method in the type Map<String,capture#1-of ? extends Object> is not applicable和Difference between <? super T> and <? extends T> in Java
答案 0 :(得分:6)
由于Predicate
将消费 Integer
,您应该这样做:
Predicate<? super Integer> predUpper //Solution 1
或只是:
Predicate<Number> predUpper //Solution 2
然而,这些方法存在差异:
“Solition 1”中的类型参数<? super Integer
表示超级类型Integer
(包括Integer
)的整个系列。
“解决方案2”中的类型参数<Number>
表示Number
接口的子类。由于Integer
是这样的,因此适用于此。
更多信息: