Collection <?>有什么意义

bla*_*her 13 java

我一直在阅读Effective Java,我遇到了无界的Collection类型<?>.然而,阅读让我相信你不能把除了之外的任何元素null放入一个实例中Collection<?>.

所以,我的问题是:Collection<?>当我们只能插入null元素时,实例化的目的是什么,因为它似乎毫无意义.我一直试图找出这个概念,但它似乎没有多大意义.任何帮助将非常感激.

Sma*_*ker 24

Collection<?>允许您创建接受任何类型Collection的参数的方法.例如,如果你想要一个方法,true如果a中的任何元素Collection等于某个值,则返回该方法,你可以这样做:

public boolean collectionContains(Collection<?> collection, Object toCompareTo) {
    for (Object o : collection) {
        if (toCompareTo.equals(o)) return true;
    }
    return false;
}
Run Code Online (Sandbox Code Playgroud)

可以通过以下任何类型调用此方法Collection:

Set<String> strings = loadStrings();
collectionContains(strings, "pizza");

Collection<Integer> ints = Arrays.toList(1, 2, 3, 4, 5);
collectionContains(ints, 1337);

List<Collection<?>> collections = new ArrayList<>();
collectionContains(collections, ILLEGAL_COLLECTION);
Run Code Online (Sandbox Code Playgroud)


Sur*_*tta 5

从docs考虑以下Util方法

以下方法说明如何使用Iterator过滤任意Collection - 即遍历删除特定元素的集合.

static void filter(Collection<?> c) {
    for (Iterator<?> it = c.iterator(); it.hasNext(); )
        if (!cond(it.next()))
            it.remove();
}
Run Code Online (Sandbox Code Playgroud)

这段简单的代码是多态的,这意味着Collection无论实现如何,它都适用于任何代码.