Java:如何处理通用异构容器?

时间:2011-10-27 11:20:30

标签: java generics

在处理异构容器(即带有字符串,整数等的数据库游标)时,什么(和为什么)是更好的方法:

Vector<?> 

Vector<Object>

您可以将Vector替换为任何其他Collection,这只是示例。

4 个答案:

答案 0 :(得分:6)

我不确定你在比较什么。试图创建像

这样的矢量
    java.util.Vector<?> v = new java.util.Vector<?>();

收到错误Cannot instantiate the type Vector<?>

如果在参数列表中使用<?>(不使用super关键字),则意味着您无法在集合中插入任何内容。如果您使用<Object>,则可以插入和删除内容。

答案 1 :(得分:5)

使用Vector<Object>。在编写不知道集合的泛型类型的代码时,应使用?通配符。你无法创建new Vector<?>,所以为什么要这样做呢。你知道你想要一个可以容纳任何Object的集合,所以就这样声明它。

答案 2 :(得分:2)

Vector<Object>是一个异构容器。

Vector<?>是一个未知类型的同质容器。

答案 3 :(得分:0)

Collection<?>是所有Collection的超级类型,包括Collection<?>

使用Collection<?>可以获取集合的内容,该集合始终至少是一个Object。

但正如内森所说使用Collection<?>不允许你添加或删除元素。因为要添加或删除的任何参数都必须是此未知类型的子类型(<?>)。由于我们不知道它是什么类型,因此我们无法传递任何内容。唯一的例外是null,它是每种类型的成员。

因此,如果您只需查阅Collection的内容,则可以使用wilcard类型,但如果要添加/删除某些元素,则必须使用Collection<Object>