2014-10-28 39 views
0

我有類播放列表擴展的ArrayListputExtras(子類) - 接收基類

Playlist playlist = new Playlist(); 
intent.putExtra("playlist", playlist); 

使用,然後我試圖把它找回來:

if (getIntent().hasExtra("playlist")) { 
    playlist = (Playlist)(getIntent().getExtras().getStringArrayList("playlist")); 
} 

,但我收到錯誤: 引起:java.lang.ClassCastException:java.util.ArrayList不能轉換爲pl.mal.player.Playlist。 我知道,問題是我想將基類投給子類。但在這個例子中,我不知道如何避免它。有人能幫我嗎?

回答

1

getStringArrayList不能返回給您一個Playlist對象。你將不得不這樣做

List<String> list = getIntent().getExtras().getStringArrayList("playlist"); 
Playlist playlist = new Playlist(); 
playlist.addAll(list); 

您只能投一個目標是超類的具體運行時類型實現&接口。在這種情況下,這是ArrayList。如果你想改變,你必須修改getStringArrayList方法,因爲裏面的東西明確地說明了new ArrayList

+0

在這段時間裏,我發現類似的解決方案 - 重寫一個構造函數,因此它可以得到一個ArrayList。非常感謝! – Malvinka 2014-10-28 21:01:47