[英]Why List<Map<? extends Number,? extends Number>> is not working for List<Map<Integer,Double>>
[英]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>
。 你能安全地傳遞一個Integer
來test(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.