Zrozumienie górnej i dolnej granicy? w Java Generics

Naprawdę mam trudny czas na zrozumienie parametru dzikiej karty. Mam kilka pytań na ten temat.

? jako typ parametru można używać tylko w metodach. na przykład:printAll(MyList<? extends Serializable>) Nie mogę zdefiniować klas za pomocą? jako parametr typu.

Rozumiem górną granicę?. printAll(MyList<? extends Serializable>) znaczy: "printAll wydrukujeMyList jeśli ma obiekty, które implementująSerialzable berło."
Mam trochę problemów zsuper. printAll(MyList<? super MyClass>) znaczy: "printAll wydrukujeMyList jeśli ma przedmiotyMyClass lub dowolna klasa, która się rozciągaMyClass (potomkowieMyClass)."

Popraw mnie, gdzie poszedłem źle.

Krótko mówiąc, tylkoT lubE lubK lubV lubN może być używany jako parametry typu do definiowania klas ogólnych.? może być używany tylko w metodach

Aktualizacja 1:

public void printAll(MyList<? super MyClass>){
    // code code code
}

Accordint do książki Ivora Hortona,MyList<? super MyClass> oznacza, że ​​mogę wydrukowaćMyList jeśli ma przedmiotyMyClass lub dowolny z interfejsów lub klas, które implementuje. To jest,MyClass jestDolna granica. Jest to ostatnia klasa w hierarchii dziedziczenia. Oznacza to, że moje początkowe założenie było błędne.

Więc powiedz, jeśliMyClass wygląda jak:

public class MyClass extends Thread implements ActionListener{
    // whatever
}

następnie,printAll() wydrukuje jeśli
1. Są przedmiotyMyClass na liście
2. Są przedmiotyThread lubActionListener wList

Aktualizacja 2:

Tak więc, po przeczytaniu wielu odpowiedzi na pytanie, oto moje zrozumienie:

? extends T znaczykażda klasa, która się rozszerzaT. Tak więc mamy na myślidzieciT. Stąd,T jest górną granicą. Najwyższa klasa w hierarchii dziedziczenia

? super T znaczykażda klasa / interfejs, który jestsuper zT. Mamy zatem na myśli wszystkierodziceT. T jest więc dolną granicą. Najniższa klasa w hierarchii dziedziczenia

questionAnswers(4)

yourAnswerToTheQuestion