Collection 和Collection有什么区别

我主要是C#开发人员,当时我正在和朋友一起教数据结构,他们在大学里使用Java,我在Java中看到这样的表达:

void printCollection(Collection<?> c) {

for (Object e : c) {

System.out.println(e);

}

}

我在C#中还没有看到这样的东西,所以我想知道Java Collection<T>Collection<?>Java 之间有什么区别?

void printCollection(Collection<T> c) {

for (Object e : c) {

System.out.println(e);

}

}

我认为它也可以上面的方式编写。在文档中的家伙比较Collection<Object>Collection<T>虽然。

示例取自http://docs.oracle.com/javase/tutorial/extra/generics/wildcards.html

回答:

Collection<?> 是未知类型参数的集合。

就呼叫者而言,两者之间没有区别

void printCollection(Collection<?> c) { ... }

<T> void printCollection(Collection<T> c) { ... }

但是,后者允许实现引用集合的type参数,因此通常是首选。

存在前一种语法是因为并非总是可能在适当的范围内引入类型参数。例如,考虑:

List<Set<?>> sets = new ArrayList<>();

sets.add(new HashSet<String>());

sets.add(new HashSet<Integer>());

如果我要用?某种类型形参替换T,则所有输入集中sets将被限制为相同的组件类型,即,我无法再将具有不同元素类型的集合放入同一列表,如以下尝试所示:

class C<T extends String> {

List<Set<T>> sets = new ArrayList<>();

public C() {

sets.add(new HashSet<String>()); // does not compile

sets.add(new HashSet<Integer>()); // does not compile

}

}

以上是 Collection 和Collection有什么区别 的全部内容, 来源链接: utcz.com/qa/398158.html

回到顶部