当前位置: 首页 > 知识库问答 >
问题:

JDK 8中的Set/List初始化语法[重复]

葛浩阔
2023-03-14

JDK 8中,编译器建议省略这一点

ArrayList<String> someList = new ArrayList<String>();

对这个

ArrayList<String> someList = new ArrayList<>();

将第二个字符串标记为冗余。

然而,即使像这样完全省略了菱形运算符,编译器也不会抱怨

ArrayList<String> someList = new ArrayList();

这似乎不会在运行时产生任何问题。有钻石操作员和没有钻石操作员之间有什么具体区别吗?如果有人能详细说明,我将不胜感激。


共有2个答案

巫马玉堂
2023-03-14

这些只是编译器警告。

建议删除类型以使用菱形运算符的警告似乎已打开。关于缺少类型/菱形运算符的警告未打开。

在任何情况下,遵守的代码都是相同的。

本质上,这些警告是为了帮助生成“更安全”的代码,即更容易阅读。

商辰钊
2023-03-14

JDK 8中,编译器建议省略这一点

ArrayList<String> someList = new ArrayList<String>();

对这个

ArrayList<String> someList = new ArrayList<>();

钻石

然而,即使像这样完全省略了菱形运算符,编译器也不会抱怨

ArrayList<String> someList = new ArrayList();

这里您使用的是不鼓励使用的原始类型。

对于向后兼容性,在运行时,所有集合都被视为包含Object。泛型用于在编译时建立一个契约,该契约规定每次将某物放入或从该集合中取出某物时,它必须是xxx类型的。

所有泛型细节都不会保留在运行时(称为类型擦除),因为泛型是Java的编译时特有功能。

因此,这一准则实际上是完全可以接受的(尽管令人气馁)。然而,如果你走得更远:

ArrayList someList = new ArrayList();

你会开始发现非常奇怪和意想不到的事情正在发生。

 类似资料:
  • 本文向大家介绍Java中初始化List的5种方法示例,包括了Java中初始化List的5种方法示例的使用技巧和注意事项,需要的朋友参考一下 前言 List是java重要的数据结构之一,我们经常接触到的有ArrayList、Vector和LinkedList三种,他们都继承来自java.util.Collection接口,类图如下 Java 中经常需要使用到 List,下面简单介绍几种常见的初始化方

  • 问题内容: 我无法按照以下代码初始化列表: 我遇到以下错误: 无法实例化类型 我该如何实例化? 问题答案: 如果你检查API,则会注意到它说: 作为一种手段,它无法实例化(不可能)。 如果你检查该链接,则会发现一些实现的: 所有已知的实施类: 那些可以实例化。使用它们的链接来了解有关它们的更多信息,即IE:知道哪个更适合你的需求。 三种最常用的可能是: 奖励: 你还可以使用,以更简单的方式使用值实

  • 按照对象的类型以及初始化时的上下文,C++提供了五花八门的对象初始化的方式。若不慎误用,可能会产生匪夷所思的谬误,而且还伴随着莫名其妙的错误(调试)信息。考虑如下的代码: string a[] = { “foo”, ” bar” }; //正确:初始化数组变量 //错误:初始化列表应用在了非聚合的向量上 vector<string> v = { “foo”, ” bar” }; void f(s

  • 如果我写 而不是 或者与之相反 第一个在任何方面都不安全吗?

  • 我无法初始化列表,如以下代码所示: 我面临以下错误: 无法实例化类型 如何实例化?