我有一个实现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;
}
我确信这是一个我想念的小事,但我很遗憾。任何帮助将不胜感激。谢谢,
答案 0 :(得分:0)
改变这个:
public class Teen extends Follower
implements Parcelable{
到此:
public class Teen extends Follower{
您不必重新实施儿童中的parcelable,因为它从父母继承。我不确定,但是当你创建一个Teen时,它实现了它自己的parcelable数据类型,并且它不具有层次结构,具有它的父可分配数据类型。