2013-06-28 48 views
0

我有我的第一個列表,增加一個類型的列表爲另一種類型的列表

List<A> a 

我還有一個列表,

List<X.Y.Z> b 

如何添加第一個列表的第二個?

我試圖鑄造 -

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

嘗試添加通過第一個列表的迭代 - 沒有工作

肯定錯過了什麼?

+0

b期待的是某種類型的XYZ,並且您試圖將它傳遞給一個類型爲List的對象 – DFord

+0

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

+0

@Naveen那些不是同一類型。所以,添加所有不會在這裏工作我猜:) –

回答

4

除非有AX.Y.Z之間的繼承關係,你不能讓他們在同一個容器,因爲它們是相同類型的不

您可以使用通用的超類對象作爲的類型List,這將起作用。

+1

提到繼承的唯一人+1 – nachokk

+0

謝謝所有的答案...我正在爲此轉換寫一個不同的方法,因爲我要去多次使用它... – Techie

1

這是不可能的,因爲兩個集合的引用類型都不相同。一個List的項目可以與另一個項目合併的唯一方法是如果它們都是List<Object>類型或類型本身是相同的(或至少源自相同類型)。

0

的原因是因爲typeList<>

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()。但是,除非AX.Y.Z的一個子類,並且如果AX.Y.Z的超類,那麼只有在X.Y.Z的實例下才會投射A變量,否則這將不起作用。

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.類型。

相關問題