Lista <?> Vs Lista <? extends Object> [duplicate]

Możliwy duplikat:
Jaka jest różnica między <?> A <? extends Object> w Java Generics?

znalazłem toList<?>iList<? extends Object> działaj w ten sam sposób. Jeśli chodzi o mnie, nie ma między nimi różnicy. Jeśli nie mam racji, możesz mi wyjaśnić różnicę?

import java.util.ArrayList;
import java.util.List;

public class TestClass {

static void func1(List<?> o, Object s) {
    o.add(null); // only null
    o.add(s); // wrong
    o.get(0);  // OK
}

static void func2(List<? extends Object> o, Object s) {
    o.add(null); // only null
    o.add(s); // wrong
    o.get(0); // OK
}

public static void main(String[] args) {
    func1(new ArrayList<String>(), new Integer(1));
    func2(new ArrayList<String>(), new Integer(1));

    List<? extends Object> list1 = new ArrayList<Object>();
    List<?> list2 = new ArrayList<Object>();

    List<? extends Object> list3 = new ArrayList<String>();
    List<?> list4 = new ArrayList<String>();
}
}

questionAnswers(4)

yourAnswerToTheQuestion