在处理异构容器(即带有字符串,整数等的数据库游标)时,什么(和为什么)是更好的方法:
Vector<?>
或
Vector<Object>
您可以将Vector替换为任何其他Collection,这只是示例。
答案 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>
。