簡體   English   中英

為什么 <? extends Number> 不適合Integer?

[英]Why <? extends Number> not working for Integer?

為什么

Predicate<? super Integer> isGreaterThanZero = num -> num.intValue() > 0;

效勞於

isGreaterThanZero.test( new Integer( 2 ));

並不是

Predicate<? extends Number> isGreaterThanZero = num -> num.intValue() > 0;

我認為它們是相同的,因為Integer 是一個 Number

當你聲明Predicate<? extends Number> isGreaterThanZero Predicate<? extends Number> isGreaterThanZero ,你告訴編譯器isGreaterThanZero是一個由一些未知的Number子類型參數化的Predicate

就編譯器而言,它可以是Predicate<Double>Predicate<BigInteger> 你能安全地傳遞一個Integertest(Double x)還是test(BigInteger x) 你不能。 您可以安全地傳遞給Predicate<? extends Number> test方法Predicate<? extends Number> Predicate<? extends Number>null

如果您希望isGreaterThanZero是一個適用於Number任何子類型的謂詞,則應將其聲明為Predicate<Number>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM