java - 当泛型不是协变时,为什么可以显式转换泛型类型数组?

标签 java arrays generics covariance

因为泛型是不变的。以下代码会产生编译时错误不兼容的类型:

Stack<String> stackOfStrings = new Stack<String>();
Stack<Object> stackOfObjects = stackOfStrings;

那么为什么下面的代码会生成编译器可以接受的字符串堆栈数组,并在 Robert Sedgwick 和 Kevin Wayne 的算法,第 4 版等教科书中进行教授,第 12 页。 158:

Stack<String>[] a = (Stack<String>) Stack[];

编辑:上面直接取自教科书的片段实际上是(抱歉错误):

Stack<String>[] a = (Stack<String>[]) new Stack[N];

最佳答案

第一个问题:要解决这个问题,您可以使用 Stack<? extends Object> stackOfObjects = stackOfStrings; 。您必须告诉编译器泛型类中也允许使用子类型。

第二:我的编译器不允许这样做。

关于java - 当泛型不是协变时,为什么可以显式转换泛型类型数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29211093/

相关文章:

java - 如何使用Eclipse获取Java中2个接口(interface)的公共(public)子类?

java - 在 Gremlin 中 map() 是如何工作的?

java - 将泛型类型参数标记为 Java 8 中的功能接口(interface)

java - 合并两个流

c# - 如何在 C# 中声明一个包含固定数量固定大小字符串的数组?

Char 数组意外的空字符

java - java中的代码含义(i +"").getBytes()

.NET 泛型 : Is it possible to enforce abstract class on generic type

java - 推理变量 T 具有不兼容的边界

linux .sh 执行中的 Java 版本问题?