为什么不设置<String> set = new HashSet()而不是Set <String> set = new HashSet <String>()?

Jus*_*one 0 java generics collections raw-types

我看到的每个地方,我看到收集的类型如此完成:

Set<String> set = new HashSet<String>();
Run Code Online (Sandbox Code Playgroud)

但是,我像这样定义我的收藏

Set<String> set = new HashSet();
Run Code Online (Sandbox Code Playgroud)

我仍然得到类型检查(我的方式只是更清洁看).

也许这在创建泛型集合时有所作为?但是,假设我只想要一个HashSet of Strings,那就不是了

Set<String> set = new HashSet();
Run Code Online (Sandbox Code Playgroud)

足够?

Ran*_*itz 6

您在创建新集合时使用的是泛型类.

泛型类必须获取它封装的泛型类型,否则它被视为原始类型.

因此,适当声明集合值应该是:

Set<String> mySet = new HashSet<>();
Run Code Online (Sandbox Code Playgroud)

由于声明,您的JVM将能够推断出HashSet中使用的泛型类型 Set<String>

大多数IDE(例如Eclipse和ItelliJ)将使用其linters配置为在使用Raw Type类时提供警告.这个警告可以被抑制,但这被认为是一种不好的做法.

参考文献:

奖金: