java - putExtras(child class) - 接收基类

标签 java android inheritance

我有 class Playlist extends ArrayList 我在

中使用
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。 我知道问题是我想将基类转换为子类。但我不知道如何在这个例子中避免它。有人可以帮助我吗?

最佳答案

getStringArrayList 无法返回 Playlist 对象。你必须做类似的事情

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

您只能将对象转换为由具体运行时类型实现的父类(super class)和接口(interface)。在本例中就是 ArrayList。如果您想更改它,则必须修改 getStringArrayList 方法,因为其中明确表示 new ArrayList

关于java - putExtras(child class) - 接收基类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26617800/

相关文章:

c++ - 什么是对象切片?

javascript - 为什么 getter 或 setter 在 JavaScript 中不能独立继承?

java - 排序后数组列表中元素的位置

javascript - Android上的Javascript音频播放已静音

java - Grails 3 taglib静态编译

android - 如何更改 tabhost 中的选项卡焦点?

Android 相机 - 有时当我拍照时,应用程序卡住并且相机无法使用

java - Java中如何不重写子类中的方法?

java - 在 super() 构造函数中获取子类名称

java - 使用用户定义的值修改文件的特定内容