如果实例化一个新的HashSet,通常在以后使用Set接口对其进行操作。就像
Set<T> set = new HashSet();
那么,显式指定HashSet的类型又有什么用呢?例如:
Set<T> set = new HashSet<T>();
我已经在很多书中看到了,但是我完全想不起任何用。如果您需要访问该集合,则无论如何都将使用该接口(已被参数化)。
最佳答案
如果您这样说:
Set<T> set = new HashSet();
您会收到未经检查的转化警告。
new HashSet()
的静态类型是原始HashSet,将其转换为通用类型可能是不安全的。在其他情况下,执行分配会导致类型推断。调用静态方法是一个典型的例子。例如:
Set<T> set = Collections.emptySet();
Java不会对
new
运算符进行推论,因为这会给语言带来歧义。如果您不喜欢冗余,则可以使用wrapper静态方法,然后进行推断。 Google的Guava会这样做,因此您可以说:
Set<T> set = Sets.newhashSet();