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

Sta*_*nko 0 java generics extends interface

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

interface Predicate<T> {
   public abstract boolean check(T t);
}

Predicate<? extends Number> predUpper = null;

predUpper.check(new Integer(73));
Run Code Online (Sandbox Code Playgroud)

错误:谓词类型中的方法检查(捕获#6-of?extends Number)不适用于参数(整数)

我读过:类型Map <String中的方法,捕获#1-of?extends Object>不适用<?超级T>和<?在Java中扩展T>

Kon*_*kov 6

由于Predicate消耗Integer,你应该做的:

Predicate<? super Integer> predUpper //Solution 1
Run Code Online (Sandbox Code Playgroud)

要不就:

Predicate<Number> predUpper //Solution 2
Run Code Online (Sandbox Code Playgroud)

但是,这些方法有所不同:

  • <? super Integer"Solition 1"中的类型参数表示一整套超类型Integer(包括Integer).

  • <Number>"解决方案2"中的类型参数表示Number接口的子类.既然如此Integer,它就适用于此.

更多信息: