无论我看什么地方,我都能看到这样的集合类型:
Set<String> set = new HashSet<String>();然而,我这样定义我的收藏品
Set<String> set = new HashSet();而且我仍然可以进行类型检查(我的方法更清晰)。
也许在创建泛型集合时,这是有意义的?但是,假设我只想要一个字符串的HashSet,那么就不是
Set<String> set = new HashSet();足够的?
发布于 2018-05-22 02:10:07
在创建新集合时使用泛型类。
泛型类必须得到它封装的泛型类型,否则它被认为是生料型。
因此,对集合值的适当声明应是:
Set<String> mySet = new HashSet<>();由于在HashSet上的声明,JVM将能够推断出在Set<String>中使用的泛型类型。
大多数IDE(例如)都会配置它们的指针,以便在使用Raw类时提供警告。这个警告可以被抑制,但这被认为是一种不好的做法。
参考文献:
奖励:
发布于 2018-05-27 19:07:01
在这个特定的用例中,如果不向构造函数传递任何参数,则没有什么区别。
但是,如果使用的构造函数版本采用的参数类型取决于类型变量,则如果使用原始类型构造函数,编译器将无法正确检查类型。
此错误代码由于原始类型而编译,并将导致堆污染:
List<Integer> foo = Arrays.asList(1, 2, 3);
Set<String> set = new HashSet(foo);然而,适当地使用适当的类型参数可以阻止它编译:
List<Integer> foo = Arrays.asList(1, 2, 3);
Set<String> set = new HashSet<String>(foo);顺便说一句,如果您不想这么冗长,可以在Java 7+中使用菱形操作符:
Set<String> set = new HashSet<>();https://stackoverflow.com/questions/50458772
复制相似问题