如果您实例化一个新的 HashSet,之后您通常会使用 Set 接口(interface)来处理它。就像
Set<T> set = new HashSet();
那么显式指定 HashSet 的类型有什么用呢?例如:
Set<T> set = new HashSet<T>();
我在好几本书中都看到过它,但我想不出它有什么用。如果您需要访问该集合,无论如何您都将使用接口(interface)(已经参数化)。
最佳答案
如果你这样说:
Set<T> set = new HashSet();
您会收到未经检查的转换警告。 new HashSet()
的静态类型是原始 HashSet,将其转换为泛型类型可能不安全。
在其他情况下,进行赋值会导致发生类型推断。调用静态方法是典型的例子。例如:
Set<T> set = Collections.emptySet();
但是,Java 不会对 new
运算符进行推理,因为这会给语言带来歧义。
如果您不喜欢冗余,您可以使用包装器静态方法,然后进行推理。谷歌的Guava这样做,所以你可以说:
Set<T> set = Sets.newhashSet();
关于java - 使用通用 Set 接口(interface)时指定 HashSet 的类型有什么用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7067109/