需要 Java 泛型类型转换吗?

标签 java generics types casting

这是我教科书中的代码:

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

我的问题是:

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

    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/

相关文章:

java - 如何使用 Hibernate 嵌入通用字段?

java - 如何将类型参数的值绑定(bind)到 `this` 的类型?

haskell - 有没有办法在 Haskell 中模拟线性类型?

java - 向使用 TabPaneBuilder 创建的 TabPane 添加监听器?

java - 当我在 jList 中选择项目并使用 getSelectedIndex() 时,它返回 -1

java - Jackson JSON 不包装嵌套对象的属性

java - 向 EnumSet 添加类型参数总是给我 "Bound mismatch"

c# - System.Convert.ToInt 与 (int)

c# - 有没有办法确定泛型类型是否是从特定的泛型类型定义构建的?

java - 为什么路径/文件丢弃尾随文件分隔符?