gpt4 book ai didi

java - Java 有界通配符泛型的编译器错误

转载 作者:行者123 更新时间:2023-11-29 08:13:21 24 4
gpt4 key购买 nike

具有以下代码:

    Stack<Integer> integers = new Stack<Integer>();
Stack<? extends Number> numbers = integers;
Number n = numbers.pop();
numbers.push(3);
numbers.push(n);

我在最后两行遇到编译错误,但尽管我已经考虑过,但我不明白为什么会出现编译错误。

The method push(capture#2-of ? extends Number) in the type Stack<capture#2-of ? extends Number> is not applicable for the arguments (int)

当我评论最后一行时,我仍然得到上述编译错误,但根据我的理解,编译器应该能够从这些行中推断出正确的类型 (Stack)。

非常感谢

最佳答案

最后两行无效,因为 numbers可以是一堆 any 数字类型。考虑这个类似的代码:

Stack<Double> doubles = new Stack<Double>();
Stack<? extends Number> numbers = doubles;
Number n = numbers.pop();
numbers.push(3);
numbers.push(n);

在这里你试图放置一个 IntegerStack<Double> 上这显然是不正确的。

基本上当你像这样使用通配符时,你可以得到值out,但是你不能把值in,因为编译器不能保证它是有效的所以。

关于java - Java 有界通配符泛型的编译器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6476575/

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