Java泛型类型转换是否必要?

Mya*_*310 6 java generics types casting

这是我教科书中的代码:

Stack<String>[] a = (Stack<String>[]) new Stack[N];
Run Code Online (Sandbox Code Playgroud)

我的问题是:

  1. 为什么它是"新Stack [N]"?
  2. 为什么必须在创建的新堆栈数组上进行类型转换?我试着用它

    Stack<String>[] a = new Stack[N];
    
    Run Code Online (Sandbox Code Playgroud)

它编译并运行良好.甚至在将Strings推入a并打印pop方法之后.另外,推入一个int会立即给我一个编译错误,所以为什么有必要输入它

Stack<String>[] 
Run Code Online (Sandbox Code Playgroud)

特别?

zer*_*ain 4

您不能创建具有参数化类型的数组(请参阅泛型的限制)。所以你不能使用... = new Stack<String>[N]。使用... = new Stack[N]将起作用,但您将收到未检查转换的警告(-Xlint在 javac 中使用以查看警告)。

因此,唯一正确的方法是使用原始参数创建数组,然后将检查的强制转换应用于所需的类型。