Итак, я просматривал Java-код и наткнулся на:
List<? extends SomeObject> l;
в основном этот список принимает все объекты, которые являются своего рода SomeObject - самими SomeObject или его наследниками. Но в соответствии с полимофисом, его наследники также могут восприниматься как SomeObject, поэтому это также сработает:
List<SomeObject> l;
Так почему бы кто-то использовать первый вариант, когда второй четко определен и практически идентичен?