gpt4 book ai didi

Java (1.6) 泛型通配符

转载 作者:搜寻专家 更新时间:2023-10-31 19:46:24 25 4
gpt4 key购买 nike

考虑流动情况:

    class A {

}

class B extends A {

}


List <? extends A> x = new ArrayList<A>();
List <? extends A> xx = new ArrayList<B>();

'x' 和 'xx' 在 Java 6 和 Java 7 中都是合法的声明(我知道在 Java 7 中你也可以用一组空的类型参数 (<>) 替换构造函数的参数化类型。但是,我想知道,Java 6 中的 'x' 和 'xx' 有什么区别?

最佳答案

你写的方式,没有区别。

在编译时,两者具有相同的类型;即 List<>某种未知类型的扩展 A .
这就是为什么你不能在任何一个列表中添加任何东西——你不知道它是否真的是一个 List<B>。或 List<C>或其他类型。

在运行时,它们也有相同的类型;即 List .由于类型删除,类型参数在运行时不存在。

因为您不再保存对它的任何强类型引用,所以没有人知道其中一个列表实际上是 List<B> .

这些通配符的意义在于函数。
你可以创建一个接受 List<? extends A> 的函数, 然后传递一个 List<B>List<C> ,并且调用代码可以继续使用原始类型的原始列表。

关于Java (1.6) 泛型通配符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20495751/

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