Чтобы быть прямым, вот пример:
ArrayList <?> x = new ArrayList();
ArrayList y = new ArrayList();
x.add("abc"); // Clause 1. Compilation error - No problemo. Understood.
x.addAll(y); // Clause 2. No compilation error
Для неограниченного подстановочного знака нельзя добавлять. Почему в последнем операторе нет ошибки компиляции?