Java Android Parcelable无法实例化该类型

Java Android Parcelable无法实例化该类型,java,android,parcelable,parcel,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(Par

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

}
导入android.os.packet;
导入android.os.Parcelable;
抽象类角色实现了Parcelable{
私有字符串名称;
私有字符串图像;
公共角色(){
}
公共角色(包裹读取){
name=read.readString();
image=read.readString();
}
公共字符串getName(){
返回名称;
}
公共void集合名(字符串名){
this.name=名称;
}
公共字符串getImage(){
返回图像;
}
公共void setImage(字符串图像){
这个图像=图像;
}
公共字符串toString(){
返回此.name;
}
公共静态最终包裹。创建者=
新建Parcelable.Creator(){
公共角色createFromParcel(地块源){
返回新角色(源);
}
公共角色[]新数组(整数大小){
返回新角色[大小];
}
};
公共int描述内容(){
//TODO自动生成的方法存根
返回0;
}
公共无效写入包裹(包裹目的地,内部标志){
//TODO自动生成的方法存根
目的地书面记录(名称);
目标写入限制(图像);
}
}
然而,当我试图编译时,我得到了错误(我在那里放置了注释)

无法实例化类型角色

有什么想法吗


致以最良好的祝愿

我自己并没有在抽象类中使用过parcelable,但它应该可以。您可能需要检查或更一般地检查

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

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

只需定义您的类角色:

class Role implements Parcelable {
    //...
}

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

<>我确信你正在尝试使用一些子类角色(这是唯一的方法,你可以使用<代码>抽象<代码>,并实现<代码> PARCELSETION/CODE >这里),考虑使用这个:

公共抽象类A实现可包裹{
私人INTA;
受保护A(INTA){
这个a=a;
}
公共无效写入包(包出,内部标志){
出、出、出(a);
}
受保护的一个(包裹中){
a=in.readInt();
}
}
公共类B扩展了A{
私人INTB;
公共B(内部a、内部B){
超级(a);
这个.b=b;
}
public static final Parcelable.Creator=新建Parcelable.Creator(){
公共B createFromParcel(地块中){
返回新的B(in);
}
公共B[]新数组(整数大小){
返回新的B[尺寸];
}
};
公共int描述内容(){
返回0;
}
公共无效写入包(包出,内部标志){
super.writeToParcel(输出,标志);
外写(b);
}
二等兵B(包内){
超级(in),;
b=in.readInt();
}
}
facepalm很抱歉,我没有意识到,我必须单独管理从中继承的类,但这样做才有意义
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();
    }
}