¿De qué sirve decir <? extiende SomeObject> en lugar de <SomeObject>
Así que estaba revisando un código Java y tropecé con:
List<? extends SomeObject> l;
Básicamente, esta lista acepta todos los objetos que son algún tipo de SomeObject - SomeObject o sus herederos. Pero según el polimofismo, sus herederos también pueden ser vistos como SomeObject, por lo que esto también funcionaría:
List<SomeObject> l;
Entonces, ¿por qué alguien usaría la primera opción cuando la segunda está claramente definida y es prácticamente idéntica?