1

我正在开发一个 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);
    }

}

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

无法实例化类型角色

对此有什么想法吗?

此致

4

3 回答 3

1

Yout 类Role被定义为abstract,抽象类不能被实例化。

只需定义您的班级角色:

class Role implements Parcelable {
    //...
}
于 2012-11-21T17:14:03.423 回答
1

我自己没有在抽象类中使用过parcelable,但应该没问题。您可能想在这里查看或更一般地在这里查看

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

于 2012-09-16T14:47:47.080 回答
1

正如 qjuanp 提到的,不能实例化一个abstract类(根据 Java 和常见的 OOP 定义;你不能实例化抽象的东西,它必须被更多定义)。

我确定您正在尝试使用 Role 的某些子类(这是您可以同时使用abstractParcelable在此处实现的唯一方法),请考虑使用这种方法

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();
    }
}
于 2014-03-26T02:38:17.217 回答