类型安全是为java.util.Collection
类引入泛型的唯一原因,因此可以防止在Collection
中添加异构元素吗?或者还有其他原因吗?
答案 0 :(得分:3)
我说原因是大多数用例只需要一个类的集合,或者一个类及其子类。对于那些用例,方便具有类型安全的集合,您不需要对从各个集合中提取的键/值/条目进行类型转换。
您真正需要"收集任何对象的用例"很不寻常。但是使用?
作为集合类型参数支持这些用例; e.g。
List<Object> listOfAnything = new ArrayList<>();
显然,泛型不会阻止异构集合。但是如果你想要同质的集合,那么泛型可以让你方便地进行类型安全。
答案 1 :(得分:1)
泛型被引入Java语言以提高类型安全性。
假设您有一个项目列表,您只向其添加A类实例:
List list = new LinkedList();
list.add(new A());
list.add(new A());
...
如果要使用输入列表的某些对象,可以执行以下操作:
A a1 = (A) list.get(0);
A a2 = (A) list.get(1);
...
但是,没有什么能阻止任何人做以下事情:
list.add(new NonA());
将导致您在代码中获得ClassCastException。这是因为在运行时检查类型而不是在编译时。
输入泛型,允许您执行以下操作:
List<A> list = new LinkedList<A>();
list.add(new A());
list.add(new A());
...
现在,如果有人尝试以下内容:
list.add(new NonA());
他们将收到编译错误,从而防止出现此错误。