Java Android Parcelable无法实例化该类型
我正在开发一个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
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();
}
}