2014-02-17 50 views
3

我有延伸泛型類型的ArrayList類:鑄字的ArrayList

class ListA extends ArrayList<A>{ 

} 

現在我創造的ListA一個對象,然後我希望把它同步列表

ListA a = new ListA(); 
a = (ListA) Collections.synchronizedList(a); 

但以上代碼給出了類型轉換異常。最後一件事,我想遍歷對象a和商店列表memebers在一個不同的同步列表。

有關如何去解決這個問題的任何建議?

回答

2

替換類從ArrayList<A>繼承與接口,並含列表類

interface ListA extends List<A> { 
    // Put additional methods here 
} 
class ListAImpl implements ListA { 
    private List<A> content; 
    public ListAImpl(List<A> content) { 
     this.content = content; 
    } 
    // Use delegation for all methods of the List<A> interface, calling through 
    // to the content list. 
} 

現在你ListA對象的同步取決於你傳遞給它的構造是什麼:通過一個「純」 ArrayList<A>有一個非同步ListA,或通過一個同步的有一個同步ListA

現在您的代碼段,當您從一個非同步一個這樣的同步ListA

ListA a = new ListAImpl(new ArrayList<A>()); 
ListA sync = new ListAImpl(Collections.synchronizedList(a)); 
+0

我認爲你的意思是'新的ListAImpl',但我沒有看到嵌套'ListA'的點。 –

+1

@SotiriosDelimanolis是的 - 我在代碼中添加了一條評論,以表明這是怎麼回事。謝謝! – dasblinkenlight

2

Collections.synchronizedList()聲明如下

public static <T> List<T> synchronizedList(List<T> list) { 

換句話說,它返回一個List。你不需要也不應該對實施課程有所瞭解。因此,你不能指望它是ListA類型。

Program to interfaces只要你可以。