Java приведение из списка <B>в список <A>, где B расширяет A - PullRequest
4 голосов
/ 07 октября 2011

это возможно?если нет, то почему это невозможно в Java?

interface B extends A {}
public List<B> getList();
List<A> = getList(); // Type mismatch: cannot convert from List<B> to List<A>

Я думаю, что тема, которую я ищу, это "ковариантные типы", такие как здесь и здесь , но это мутно, и это не решает мою проблему.

Ответы [ 3 ]

6 голосов
/ 07 октября 2011

Вот интуитивный пример того, как это может привести к ужасным ошибкам:

interface B extends A {}
List<B> blist=new List<B>();
List<A> alist=blist;
alist.add(new A()); //should be ok, right?
B b = blist.get(0); //fail: even though blist is a List<B>, it now has an A in it
4 голосов
/ 07 октября 2011

Попробуйте

List<? extends A> = getList()
1 голос
/ 07 октября 2011

Причина, по которой вы не можете сделать это, состоит в том, что A и B не совпадают, вы указали, что getList возвращает список B (не суперкласс или подкласс)

...