有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

需要Java泛型类型转换吗?

这是我课本上的代码:

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

我的问题是:

  1. 为什么是“新堆栈”
  2. 为什么要对创建的新堆栈数组进行类型转换?我只是试了一下

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

它编译并运行良好。甚至在将字符串推入a并打印pop方法之后。此外,将int推入会立即给我一个编译器错误,那么为什么需要将其强制类型转换为

Stack<String>[] 

具体地说


共 (1) 个答案

  1. # 1 楼答案

    不能使用参数化类型创建数组(请参见Restrictions on Generics)。所以你不能使用... = new Stack<String>[N]。 使用... = new Stack[N]会起作用,但对于未经检查的转换,会有一个警告(使用javac中的-Xlint查看警告)

    因此,唯一正确的方法是使用原始参数创建数组,然后对想要的类型应用选中类型转换