我了解您将如何编写 contains(E item) 方法,方法是检查 this 中的每个项目,如果发现其中一个元素等于 item 则返回 true。
但是当你通过 c 时,你会如何处理集合的 Wildcard 类型?例如,你应该说:
for (Object item: c) {
您如何引用它是 ?
类型。
编译器不喜欢:
for (? item: c)
或
for (<?> item: c)
最佳答案
是的,你会写
for (Object item: c) {
根本就没有名为 ?
的类型——它是一个通配符,表示此处允许任何内容(即允许的类型没有界限);它不是“通配符类型”。您能做的最好的事情就是使用 Object
,因为您对此类集合中的元素一无所知。通配符的作用是表示类型未知。
通配符与
有很大不同Collection<E>
或
Collection<Object>
有一些解决这些差异的 SO 问题;一个是 Java Generics (Wildcards) .
但同样,关键思想是 ?
不是一种类型,它更像是一个元级概念。这就是为什么您不能声明该“类型”的变量的原因。
关于Java List 接口(interface)方法 : containsAll(Collection<? > c),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7961627/