这是我教科书中的代码:
Stack<String>[] a = (Stack<String>[]) new Stack[N];
我的问题是:
- 为什么是“new Stack[N]”?
为什么要对创建的新堆栈数组进行类型转换?我试了一下
Stack<String>[] a = new Stack[N];
它编译并运行良好。即使在将字符串插入 a 并打印 pop 方法之后。此外,将 int 插入会立即给我一个编译器错误,所以为什么有必要将其类型转换为
Stack<String>[]
具体是什么?
最佳答案
您不能创建具有参数化类型的数组(参见 Restrictions on Generics )。所以你不能使用 ... = new Stack<String>[N]
.
使用 ... = new Stack[N]
将工作,但您将收到未经检查的转换警告(在 javac 中使用 -Xlint
以查看警告)。
因此,唯一正确的方法是使用原始参数创建数组,然后将经过检查的转换应用于所需类型。
关于需要 Java 泛型类型转换吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36366910/