整数扩展数字但不能操作<! - ?使用Integer扩展Number - >

时间:2015-08-31 10:55:41

标签: java generics interface extends

整数扩展数字,为什么我在底部得到错误?

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 applicableDifference between <? super T> and <? extends T> in Java

1 个答案:

答案 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是这样的,因此适用于此。

更多信息: