我正在使用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);
}
}
然而,当我尝试编译时,我得到错误(我放置评论的地方)
无法实例化类型角色
对此有何想法?
祝你好运
答案 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();
}
}