如果实例化一个新的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();

10-07 19:27
查看更多