我理解如何编写一个contains(E item)方法,通过检查this中的每个项目,如果你发现其中一个元素等于item,则返回true。
但是当你通过c时,你将如何处理集合的通配符类型?你应该这样说:
for (Object item: c) {
您如何引用它是?
类型。
编译器不喜欢:
for (? item: c)
或
for (<?> item: c)
答案 0 :(得分:3)
是的,你写了
for (Object item: c) {
根本没有名为?
的类型 - 它是一个通配符,表示此处允许任何内容(即,对于允许的类型没有 bounds );它不是“通配符类型”。您可以做的最好是使用Object
,因为您对此类集合中的元素一无所知。通配符的意思是说类型未知。
通配符与
完全不同Collection<E>
或
Collection<Object>
有一些SO问题可以解决这些差异;一个是Java Generics (Wildcards)。
但同样,关键的想法是?
不是一种类型,它更像是一个元级别的概念。这就是为什么你不能声明那个“类型”的变量。
答案 1 :(得分:0)
是的,请使用for(Object item: c)
。