2015-08-31 25 views
0

Integer擴展數字,爲什麼我會在底部得到錯誤?整數擴展數字,但不能在<?用整數擴展Number>

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

Predicate<? extends Number> predUpper = null; 

predUpper.check(new Integer(73)); 

錯誤:該方法檢測(?捕獲#6的擴展碼)的類型謂詞是不適用的參數(整數)

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

回答

6

由於Predicate消耗Integer,你應該做的:

Predicate<? super Integer> predUpper //Solution 1 

或者只是:

Predicate<Number> predUpper //Solution 2 

有差異,但是,在這些方法:從 「孤子1」 代表全家超類型的Integer

  • 類型參數<? super Integer(包括Integer)。

  • 來自「解決方案2」的類型參數<Number>代表Number接口的子類。由於Integer就是這樣,所以在這裏適用。

更多信息: