Android Parcelable无法实例化该类型

时间:2012-09-16 13:30:19

标签: java android parcelable parcel

我正在使用Android应用,我正在尝试使用Parcelable传递信息。所以这就是我所拥有的。

import android.os.Parcel;
import android.os.Parcelable;

abstract class Role implements Parcelable {

    private String name;
    private String image;

    public Role() {

    }

    public Role(Parcel read) {
        name = read.readString();
        image = read.readString();
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getImage() {
        return image;
    }

    public void setImage(String image) {
        this.image = image;
    }

    public String toString() {
        return this.name;
    }

    public static final Parcelable.Creator<Role> CREATOR = 
            new Parcelable.Creator<Role>() {

                public Role createFromParcel(Parcel source) {
                    return new Role(source);
                }

                public Role[] newArray(int size) {
                    return new Role[size];
                }
            };

    public int describeContents() {
        // TODO Auto-generated method stub
        return 0;
    }

    public void writeToParcel(Parcel dest, int flags) {
        // TODO Auto-generated method stub
        dest.writeString(name);
        dest.writeString(image);
    }

}

然而,当我尝试编译时,我得到错误(我放置评论的地方)

  

无法实例化类型角色

对此有何想法?

祝你好运

3 个答案:

答案 0 :(得分:1)

我自己没有在抽象类中使用parcelable,但它应该没问题。您可能需要查看here或更常见的here

我有一个非常相似的类(两个字符串),但它是一个公共静态类。 我在构造函数中对我的字符串成员执行new()。

答案 1 :(得分:1)

Yout类Role定义为abstract,抽象类无法实例化。

只需定义你的类角色:

class Role implements Parcelable {
    //...
}

答案 2 :(得分:1)

正如qjuanp所提到的,人们不能实例化abstract类(根据Java和常见的OOP定义;你不能实例化抽象的东西,它必须更加明确)。

我确定您正在尝试使用某些角色的子类(这是您可以同时使用abstract和实现Parcelable的唯一方法),请考虑使用此approach

public abstract class A implements Parcelable {
    private int a;

    protected A(int a) {
        this.a = a;
    }

    public void writeToParcel(Parcel out, int flags) {
        out.writeInt(a);
    }

    protected A(Parcel in) {
        a = in.readInt();
    }
}

public class B extends A {
    private int b;

    public B(int a, int b) {
        super(a);
        this.b = b;
    }

    public static final Parcelable.Creator<B> CREATOR = new Parcelable.Creator<B>() {
        public B createFromParcel(Parcel in) {
            return new B(in);
        }

        public B[] newArray(int size) {
            return new B[size];
        }
    };

    public int describeContents() {
        return 0;
    }

    public void writeToParcel(Parcel out, int flags) {
        super.writeToParcel(out, flags);
        out.writeInt(b);
    }

    private B(Parcel in) {
        super(in);
        b = in.readInt();
    }
}