2013-06-29 105 views
0

我有兩個類A和B,二者擴展類C. 現在,類d具有兩個的ArrayLists作爲成員:角色上的ArrayList泛型

  • 的ArrayList < A>(所述arrayA
  • ArrayList的< B>(據說arrayB

d也有返回要麼arrayA或arrayB的方法,但我想將它們轉換在ArrayList<C>,所以我不擔心DIS cern是否返回arrayAarrayB

我知道ArrayList<A>ArrayList<B>不延伸ArrayList<C>(即使A和B擴展C),但我該怎麼做?

回答

2

您應該從類D的方法返回ArrayList<? extends C>

編輯:

您需要返回的值轉換爲預期的類型,你會得到不安全的類型轉換操作的華林。這是不可避免的。在d類爲

ArrayList<? extends C> 
+0

你10秒:) –

+0

是啊,打我的運氣要好一些這個時候...:P你知道,你總是打我像這樣..:d –

+0

我認爲這,但它「不起作用」。我的意思是我必須顯式地在ArrayList < C >中投射返回的類型,並且我有一個不安全類型的警告。 –

0

有1 ListArrayList<C>和返回List<C>的方法。

這樣,你可以add(C element),它可以是AB

0

你的返回類型查看Wildcards的文檔。這裏有一個例子:

class C { 
} 

class A extends C { 
} 

class B extends C { 
} 

class D { 
    private ArrayList<A> aList; 
    private ArrayList<B> bList; 

    public ArrayList<? extends C> getList(boolean aOrB) { 
     return aOrB ? aList : bList; 
    } 
}