java – Collection <?>和Collection之间有什么区别?

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

void printCollection(Collection<?> c) {
    for (Object e : c) {
        System.out.println(e);
    }
}

我没有在C#中看到这样的东西,所以我不知道Collection< T>和集合<?>在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

收集和LT;?>是未知类型参数的集合。

就呼叫者而言,没有区别

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

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

然而,后者允许实现引用集合的类型参数,因此通常是优选的。

存在前面的语法,因为并不总是可以在适当的范围引入类型参数。例如,考虑:

List<Set<?>> sets = new ArrayList<>();
sets.add(new HashSet<String>());
sets.add(new HashSet<Integer>());

如果我要更换?通过某些类型参数T,集合中的所有集合将被限制为相同的组件类型,即我不能再将具有不同元素类型的集合放入同一列表中,如以下尝试所证明的:

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
    }
}
http://stackoverflow.com/questions/10777701/what-is-the-difference-betwen-collection-and-collectiont

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:java – Collection <?>和Collection之间有什么区别?