Czego używasz mówiąc <? rozszerza SomeObject> zamiast <SomeObject>

Szukałem kodu Java i natknąłem się na:

List<? extends SomeObject> l;

zasadniczo ta lista akceptuje wszystkie obiekty, które są pewnego rodzaju SomeObject - sam obiekt lub jego spadkobiercy. Ale zgodnie z polimofizmem, jego dziedziczniki mogą być również seens jako SomeObject, więc to również zadziałałoby:

List<SomeObject> l;

Dlaczego więc ktoś miałby korzystać z pierwszej opcji, gdy druga jest jasno zdefiniowana i praktycznie identyczna?

questionAnswers(5)

yourAnswerToTheQuestion