gpt4 book ai didi

java - Java 中的泛型声明差异

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:52:32 26 4
gpt4 key购买 nike

 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com