2013-06-28 3 views
0

у меня есть свой первый список, какдобавить список одного типа в список другого типа

List<A> a 

У меня есть еще один список, как

List<X.Y.Z> b 

Как добавить первый список второй ?

Я попытался отливку -

b.add(List<X.Y.Z>)a) - did not work 

попытался добавить через итерации первого списка - не работает

определенно что-то пропустил?

+0

b ожидает что-то типа XYZ и пытается передать ему объект типа Список – DFord

+0

http://stackoverflow.com/questions/11273440/adding-one-list-to-another-list-in-list-to-another-list-in-java –

+0

@Naveen Это не sametype.So добавить все не работает здесь, я думаю :) –

ответ

4

Если не является Наследование отношения между A и X.Y.Z вы не может иметь их в том же контейнере, потому что они не имеют той же типа

Вы можете использовать общий суперкласс объекта в качестве типа List и это сработает.

+1

единственный, кто упоминает наследование +1 – nachokk

+0

Спасибо всем за ответ ... Я пишу другой метод для этого преобразования, поскольку я иду использовать его несколько раз ... – Techie

1

Это невозможно, так как ссылочные типы для обеих коллекций различны. Единственный способ, по которому элементы из одного List можно объединить с другими, - это если они оба типа List<Object>, либо сами типы идентичны (или, по крайней мере, получены из того же типа).

0

Причина в том, из-за type из List<>

X.Y.Z != A 

Вы можете использовать List<Object>, к которому вы можете add() anything.Even хотя вы добавили как этот

вы должны бросить каждый один назад, возвращаясь.

0

Вам необходимо указать список a как тот же тип, что и список b, чтобы они были одним и тем же типом объекта. Проверьте this article

0

Следует также отметить, что если вы хотите добавить элементы List<A> a к List<X.Y.Z> b (который я предполагаю, ваша цель), а не сам как элемент List<A> a, вы должны использовать метод addAll(), не метод add(). Но опять же, это не сработает, если A не является подклассом X.Y.Z, и если A является суперклассом X.Y.Z, тогда литье переменной A будет работать только в том случае, если это экземпляр X.Y.Z.

0

Либо вы используете List<Object>, к которому вы можете добавить что-нибудь, либо вы можете написать метод для преобразования объекта типа A в X.Y.Z.

Обратите внимание, что, если вы используете List<Object>, вам нужно привести объект к нужному классу, когда вы получите это:

List<Object> myList = new List<Object>; 
// ... 
A myObject = (A) myList.get(0); 
X.Y.Z otherObject = (X.Y.Z) myList.get(1); 
// ... 
0

Рассмотрим следующий случай

List<Integer> l1=new ArrayList<>(); 
    List<String> l2=new ArrayList<>(); 

    l1.add(2); 
    l2.addAll((List<String>)l1); 

вы пытаетесь делать то же самое. здесь вы не можете перечислить целочисленный список в список строк.

То же самое, что вы не можете отличить Список типов к X.Y.Z. тип.