Если у меня есть метод в MyClass
такой как
setSuperClassList(List<Superclass>)
... если я могу сделать это:
new MyClass().setSuperClassList(new ArrayList<Subclass>())
Кажется, что это не скомпилирует. Почему?
Попробуйте setSuperClassList(List extends Superclass>)
.
Также проверьте PECS, чтобы узнать, следует ли использовать ? extends
или ? super
.
Он не будет компилироваться, поскольку java.util.List
не является ковариантным .
Попробуйте вместо этого setSuperClassList (List Extends Superclass>)
.
Вы просто делаете дженерики немного неправильно. Добавьте бит ? extends
, и это позволит передаваемому списку содержать суперкласс или любой из его подклассов.
setSuperClassList(List<? extends Superclass>)
Это называется установлением верхней границы для дженериков.
Утверждение List
говорит, что список может содержать только SuperClass
. Это исключает любые подклассы.
Do:
setSuperClassList(List<? extends Superclass> list)
Это позволит получить список из любого подкласса Суперкласса.