gpt4 book ai didi

java - 带 super 的通配符

转载 作者:行者123 更新时间:2023-12-02 06:42:50 24 4
gpt4 key购买 nike

考虑

List<? super Integer> lst= new ArrayList<Number>();
lst.add(new Integer(3)); //ok- why?? I expected compile error "expected add(int, Object), found add(int,CAP#1)"
lst.get(0); //ok

List <? extends Number> nums= new ArrayList<Integer>();
lst.add(new Integer(3));//Compile error- expected add(int, Object), found add(int,CAP#1)

在编译状态下,我们不知道 <? extends Number> 的类型并且有编译错误。我们知道 <? super Integer> 的类型吗在编译状态?为什么?

最佳答案

当然 - 你知道无论通配符的值是什么,它都是 Integer 的父类(super class)。 (根据定义,来自边界)。因此,无论它的具体类是什么,您都会有一个可以容纳 Integer 的列表。 。一个List<Object>List<Number>List<Integer> 一样有效在此背景下。

但是,对于extends,情况就不同了。一个List<? extends Number>可能是List<Double> ,因此很明显,在不违反类型安全的情况下,不能将 Integer 插入到此列表中。 (事实上​​,出于这个原因,除了 null 之外,根本无法插入任何内容。)

关于java - 带 super 的通配符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18963948/

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