Java наследование обобщённых типов

Если создать переменную типа List<Number>, то ей нельзя будет присвоить ссылку на экземпляр ArrayList<Integer>  или ArrayList<Double>. Вы можете присвоить ей только экземпляр ArrayList<Number> ( либо LinkedList<Number> ):

List<Number>  и List<Integer>  — это совершенно разные, несовместимые объекты, несмотря на то что Integer  наследуется от Number.

Однако переменной типа List<?>  можно присвоить как ArrayList<Number>, так и ArrayList<Integer>.

List<?>  является общим предком для List<Number>  и List<Integer>.

Аналогичным образом List<? extends Number>  является предком для List<? extends Integer>:

Также List<? super Integer>  является предком для List<? super Number>:

Это, наверное, трудно так сразу понять и запомнить, но как только вы осознаете это, то это начнёт выглядеть абсолютно логично. На первых порах можете просто выучить, что наследование обобщённых типов работает именно так, вдруг где пригодится.

 


Поделиться:

Добавить комментарий

Ваш e-mail не будет опубликован.

CAPTCHA

*