为什么为Collection类引入了泛型?

时间:2014-03-23 07:57:52

标签: java generics collections

类型安全是为java.util.Collection类引入泛型的唯一原因,因此可以防止在Collection中添加异构元素吗?或者还有其他原因吗?

2 个答案:

答案 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());

他们将收到编译错误,从而防止出现此错误。