Android Parcelable Не удается создать экземпляр типа

Я работаю над приложением для 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);
    }

}

Однако, когда я пытаюсь скомпилировать, я получаю сообщение об ошибке (где я разместил комментарий)

Не удается создать экземпляр роли типа

Есть мысли по этому поводу?

С наилучшими пожеланиями


person brancz    schedule 16.09.2012    source источник


Ответы (3)


Я сам не использовал посылки в абстрактном классе, но все должно быть в порядке. Вы можете проверить здесь или, в более общем случае, здесь

У меня есть ОЧЕНЬ похожий класс (две строки), но это общедоступный статический класс. Я делаю new() для своих строковых членов в конструкторе.

person opaque    schedule 16.09.2012
comment
facepalm извините, я не понял, что мне нужно управлять классами, которые наследуются от него, отдельно, но это имеет смысл только таким образом - person brancz; 16.09.2012

Ваш класс Role определен как abstract, абстрактные классы не могут быть созданы.

просто определите свою роль класса:

class Role implements Parcelable {
    //...
}
person qjuanp    schedule 21.11.2012

Как упоминал qjuanp, нельзя создать экземпляр класса abstract (в соответствии с определением Java и общим определением ООП; вы не можете создать экземпляр чего-то абстрактного, он должен быть более определенным).

Я уверен, что вы пытаетесь использовать некоторые подклассы Role (это единственный способ, которым вы можете использовать как abstract, так и реализовать Parcelable здесь), рассмотрите возможность использования этого подход:

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();
    }
}
person ericn    schedule 26.03.2014