gpt4 book ai didi

java - 为什么 不适用于 Integer?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:09:41 26 4
gpt4 key购买 nike

为什么

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

工作
isGreaterThanZero.test( new Integer( 2 ));

而不是

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

我认为它们是相同的,因为 Integer is-a Number

最佳答案

当你声明Predicate<? extends Number> isGreaterThanZero ,你告诉编译器 isGreaterThanZeroPredicateNumber 的一些未知子类型参数化.

就编译器所知,它可能是一个 Predicate<Double>Predicate<BigInteger> .你能安全地通过一个Integer吗?至 test(Double x)test(BigInteger x) ?你不能。唯一可以安全传递给 test 的东西Predicate<? extends Number>的方法|是null .

如果你想要isGreaterThanZero成为适用于 Number 的任何子类型的谓词,您应该将其声明为 Predicate<Number> .

关于java - 为什么 <? extends Number> 不适用于 Integer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37605084/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com