Как подстановочные знаки работают в Java

Я читаю java-руководство по подстановочным знакам в универсальных шаблонах. В следующем коде:

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

Означает ли это, что коллекция c принимает тип объект в качестве своих элементов, и мы не можем вызвать c.add ("apple") , поскольку «яблоко» - это строка, а цикл for принимает любые элементы объекта из коллекции c ?

Но я не понимаю следующий код,

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

В этом коде используются подстановочные знаки , что означает «коллекция, тип элемента которой соответствует чему-либо». Означает ли это, что мы можем добавить к нему любой тип объекта, например c.add ("string"); , c.add (1); и c.add (новое яблоко ()); ? и цикл for берет любой объект e из коллекции c , если c не является типом объекта , мы говорим c Элементы являются целыми числами. Этот код работает? Значит ли это, что его нужно заливать?

7
задан durron597 23 April 2015 в 19:21
поделиться