java - 实例化泛型类时传递类型变量

标签 java generics

谁能解释一下 ArrayList 类的这两个实例有什么不同?

List<Integer> intList = new  ArrayList();
List<Integer> intList = new  ArrayList<Integer>();

我知道编译器在将其编译为字节码时会删除类型变量,即 Integer,并且上面的示例都完全相同。我想知道在右侧传递类型变量 (Integer) 是否有任何好处,因为它已经在左侧声明了?据我在网上找到的,他们都使用后一种,但我看不出有任何理由我应该在双方声明两次。

最佳答案

它们是两个不同的东西。左侧是变量的类型。右侧是您正在创建的对象的类型。编译器将首先使用您在右侧提供的类型创建对象,然后将引用分配给您左侧的变量。

在您的情况下,没有区别,因为 ArrayList 在所有情况下都具有相同的构造函数。然而:

  • 在其他类中,构造函数的行为可能会根据您提供的特定类型而有所不同。
  • 如果您匹配类型,您将使编译器更容易。在第一个版本中,编译器必须分配一个类型为 ArrayList 的对象。到一个需要 List<Integer> 的变量类型。在某些情况下,您可能会收到警告,因为类型不明显匹配。

关于java - 实例化泛型类时传递类型变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4415319/

相关文章:

java -/storage/emulated/0/Notes/(没有这样的文件或目录)?

java - 将文件夹中的文件列出到 JOptionPane

c# - 运算符 == 不能应用于 C# 中的泛型类型吗?

java - 再次泛型通配符。

带有泛型的 Java 反射方法调用

java - 构造泛型类的新实例

java - 在 Java 中引用本地 DTD

java - 如何将输入(int、String 等)转换为同类的最终变量?

java - 如何制作行业标准的桌面 Java 应用程序?

c# - 支持任何模型的通用 Web Api Controller