据我所知,泛型仅在编译时有用。
因此可以声明:
private Set set = new HashSet<String>();
然后,在这个字符串哈希集中,将狗或任何东西添加到该集合中,没有任何问题,因为在运行时没有像数组 (ArrayStoreException...) 那样的任何检查(但是当你使用它时,你可能会遇到类转换之类的问题放...
所以我想说的是,我们通常这样实例化泛型集合:
Set<String> set = new HashSet<String>();
我的问题是,为什么我们要放置 HashSet 的类型,因为只有变量引用的类型才是真正重要的(我认为)。
我的意思是,我们可以简单地写:
Set<String> set = new HashSet();
它的工作原理完全相同吗?那么为什么我们通常在实例化的时候写类型呢?(这不是强制性的)
编辑
我知道用于类型推断的“钻石运算符”,但为什么我们甚至需要它!!!因为类型推断已经开始工作了!
以下代码:
Set<String> set = new HashSet();
set.add("Test add a string 1");
set.add("Test add a string 2");
for ( String s : set ) {
System.out.println(s);
}
产生输出:
测试添加字符串 1 测试添加字符串 2
因此,现在您将类型推断作为 Java7 的一项功能进行讨论,但它已经对我有用了……
使用 java7 我将不得不更换我的
Set<String> set = new HashSet();
经过
Set<String> set = new HashSet<>();
做完全相同的事情仍然需要 2 个额外的字符,不是吗?(除非泛型不仅是 Java7 的编译时间?我不知道)