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?