Qual é o uso de dizer <? estende SomeObject> em vez de <SomeObject>

Então, eu estava procurando por algum código Java e me deparei com:

List<? extends SomeObject> l;

Basicamente, essa lista aceita todos os objetos que são algum tipo de SomeObject - SomeObject em si ou seus herdeiros. Mas, de acordo com o polimorfismo, os herdeiros também podem ser vistos como SomeObject, então isso também funcionaria:

List<SomeObject> l;

Então, por que alguém usaria a primeira opção quando a segunda estiver claramente definida e virtualmente idêntica?

questionAnswers(5)

yourAnswerToTheQuestion