当我把它作为额外的东西时,为什么android将我的基类转换为它的父类?

时间:2014-08-27 07:47:05

标签: java android serialization

我有一个课程可以帮助我节省时间,所以我不必总是写长班名:

public class ImageBucket extends ArrayList<LoadableGeoLocationImage> implements Serializable{
    private static final long serialVersionUID = -4275196266297013629L;

    public ImageBucket() {}

    public ImageBucket(Collection<? extends LoadableGeoLocationImage> collection) {
        super(collection);
    }

    public ImageBucket(int capacity) {
        super(capacity);
    }

    public ImageBucket(ImageBucket ... buckets){
        super();

        for(ImageBucket bucket: buckets){
            this.addAll(bucket);
        }
    }
}

我使用此类将数据从活动A传递到活动B:

    ImageBucket images = this.getImages();

    System.err.println(images.getClass().getName()); // Prints: .....ImageBucket

    Intent intent = new Intent(this, DetailActivity.class);
    intent.putExtra(DetailActivity.INTENT_ARG_IMAGES, images);

但是当我尝试获取我的数据时,我得到一个ClassCastException:

    Serializable seriImgBucket = this.getIntent().getExtras().getSerializable(INTENT_ARG_IMAGES);
    System.err.println(seriImgBucket.getClass().getName()); //Prints: ....ArrayList

    this.images = (ImageBucket) seriImgBucket;

为什么android会返回我的基类,而不是我添加到额外的那个,我该如何解决?

1 个答案:

答案 0 :(得分:0)

在我看来,通过这段代码

Serializable seriImgBucket = this.getIntent().getExtras().getSerializable(INTENT_ARG_IMAGES);

ImageBucket类已被强制转换为其超类,并且此过程不可逆转。 所以,我建议你像这样修改它

ImageBucket seriImgBucket = this.getIntent().getExtras().getSerializable(INTENT_ARG_IMAGES);

此外,它可以帮助您保存一些代码!祝你好运!