java - 使用通用 Set 接口(interface)时指定 HashSet 的类型有什么用?

标签 java

如果您实例化一个新的 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/

相关文章:

java - 如何检查 dynamoDB 过滤器表达式中是否不存在属性

java - 我是否可以在独立 ejb 模块中引用任何外部第 3 方 jar?

java - JSTL c :set a bean property with an array, 调用了错误的 setter 方法

java - 获取 Android 25 英里半径范围内的邮政编码

Java 使用 SimpleDateFormat 解析日期

java - 奇怪的 xml/html 重音问题

java - 在 Java Swing 中手动设置分辨率

java - 为桌面手机(android-java)的背景设​​置图库中的图像

java - 如何在 Android 上解析 GPS 导航消息

MS Paint 中 TextBox 的 java 代码