【问题标题】:Integer extends Number but can't operate on <? extends Number> with Integer [duplicate]整数扩展了 Number 但不能对 <?用整数扩展 Number> [重复]
【发布时间】:2015-08-31 10:55:40
【问题描述】:

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) 不适用于参数(整数)

我已阅读:Method in the type Map<String,capture#1-of ? extends Object> is not applicableDifference between <? super T> and <? extends T> in Java

【问题讨论】:

    标签: java generics interface extends


    【解决方案1】:

    由于Predicate消耗Integer,您应该这样做:

    Predicate<? super Integer> predUpper //Solution 1
    

    或者只是:

    Predicate<Number> predUpper //Solution 2
    

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

    • “Solition 1”中的类型参数&lt;? super Integer 代表了Integer(包括Integer)的整个家族

      李>
    • “解决方案 2”中的类型参数 &lt;Number&gt; 表示 Number 接口的子类。既然Integer是这样的,这里就适用。

    更多信息:

    【讨论】:

      猜你喜欢
      • 2017-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多