因为泛型是不变的。以下代码会产生编译时错误不兼容的类型
:
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/