List<String> v = new ArrayList<String>();
我知道泛型可以帮助您声明 ArrayList() 具有字符串类型的对象。我的问题是 下面的和上面的有什么不同?
List<String> v = new ArrayList();
或者下面那个和其他的不一样
List v = new ArrayList<String>();
最佳答案
List<String> v = new ArrayList();
这个在功能上并没有真正的不同。右侧的类型参数实际上并没有做任何事情。它被用作样式问题并避免使用 Raw 类型,这被认为是编程错误。事实上,在 Java 7 中它得到了增强,所以你可以这样做:List<String> v = new ArrayList<>();
而不必在右侧重复自己。
List v = new ArrayList<String>();
没有类型参数的列表称为原始类型。在使用泛型的新代码中声明原始类型通常被认为是编程错误。基本上,当您以这种方式声明时,根本不会进行类型检查,您可以在该列表中放入任何内容。
Java 泛型是一种编译时检查。因此,重要的是编译时引用的类型。如果您的引用是 Raw List
类型您在右侧声明的内容无关紧要,这就是编译器将检查的内容。
List<String>
并不是真正的“具有字符串的列表”。这是一个“我已经要求编译器返回错误和/或警告我的列表,如果我在那里放了一些不是字符串的东西。如果你忽略编译器警告,那完全有可能得到一些东西” t 一个字符串。
关于java - Java 中的泛型声明差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10093597/