android中的parcelable继承引起了ClassCastExeption

时间:2015-10-07 06:51:40

标签: android inheritance classcastexception parcelable

我有一个实现parcelable的Parent类和一个扩展父类的子类也实现了parcelable。我的代码附在下面。我得到一个运行时ClassCastException。我错过了什么? 谢谢,

父类:

public class Follower implements Parcelable{

private long id;
private String fullName;

public Follower() {

}

public Follower(String fullName) {
    this.fullName = fullName;
    }

public long getId(){
    return id;
}

public void setId(long id) {
    this.id = id;
}

public String getFullName() {
    return fullName;
}

public void setFullName(String fullName) {
    this.fullName = fullName;
}

@Override
public int describeContents() {
    return 0;
}

@Override
public void writeToParcel(Parcel dest, int flags) {
    dest.writeString(getFullName());

}

protected Follower(Parcel in){
    setFullName(in.readString());
}

public static final Parcelable.Creator<Follower> CREATOR =
        new Parcelable.Creator<Follower>() {
            public Follower createFromParcel(Parcel in) {
                return new Follower(in);
            }

            public Teen[] newArray(int size) {
                return new Teen[size];
            }
        };

}

儿童班

public class Teen extends Follower
              implements Parcelable{


public Teen(){
    super();    
}


public Teen( String fullName, String birthDate) {
    super(fullName);
    this.birthDate = birthDate;
}

private String birthDate;

public String getBirthDate() {
    return birthDate;
}

public void setBirthDate(String birthDate){
    this.birthDate = birthDate;
}

@Override
public int describeContents() {
    return 0;
}

@Override
public void writeToParcel(Parcel dest, int flags) {
    super.writeToParcel(dest, flags);
    dest.writeString (birthDate);
}

private Teen(Parcel in){
    super(in);  
    birthDate = in.readString();
}

public static final Parcelable.Creator<Teen> CREATOR =
        new Parcelable.Creator<Teen>() {
            public Teen createFromParcel(Parcel in) {
                return new Teen(in);
            }

            public Teen[] newArray(int size) {
                return new Teen[size];
            }
        };

}

在服务器上,我创建了一个Teen / Follower,如下所示。青少年和追随者clasess被复制到服务器而没有可实现的实现。

public Follower getData()
{
   if (logic to see if the user is a teen){
            Teen t = new Teen( "Full Name", "1:1:1960");
            return t;
  }
  else  
  {
      Follower f = new Follower("Full Name");
      return f;
  }
}

在客户端

我在客户端代码中获得了追随者。我通过访问Follower类方法进行了检查。有用。但是当我做这样的事情时,我在运行时得到一个ClassCastException。

    if(logic to see if it is a teen)
    {
        Teen t = (Teen) follower;
     }

我确信这是一个我想念的小事,但我很遗憾。任何帮助将不胜感激。谢谢,

1 个答案:

答案 0 :(得分:0)

改变这个:

public class Teen extends Follower implements Parcelable{

到此:

public class Teen extends Follower{

您不必重新实施儿童中的parcelable,因为它从父母继承。我不确定,但是当你创建一个Teen时,它实现了它自己的parcelable数据类型,并且它不具有层次结构,具有它的父可分配数据类型。