我有一个服装类,它有一个抽象类作为其属性之一。当我侦听数据库中的更改时,出现此错误java.lang.RuntimeException: java.lang.InstantiationException: Can't instantiate abstract class com.example.recouture.Item
DatabaseReference reference = FirebaseDatabase.getInstance().getReference();
Query query = reference.child(FirebaseAuth.getInstance().getCurrentUser().getUid()).child("Outfits");
query.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot singleSnapshot : dataSnapshot.getChildren()) {
outfits.add(singleSnapshot.getValue(Outfit.class)); //error is here
}
是否有可能规避这一点,因为使 Item 非抽象会导致我的其他代码部分出现设计问题。Item 是抽象的,因为它可以包含从 Item 类扩展的 Shirt、Pants 等。
服装.java
public class Outfit implements Parcelable{
private List<Item> itemList = new ArrayList<>();
private String mName;
private String mImageUrl;
public Outfit() {}
public Outfit(String mName, String mImageUrl,List<Item> items) {
this.mName = mName;
this.mImageUrl = mImageUrl;
this.itemList = items;
}
public List<Item> getItemList() {
return itemList;
}
protected Outfit(Parcel in) {
in.readList(itemList,Item.class.getClassLoader());
mName = in.readString();
mImageUrl = in.readString();
}
public static final Creator<Outfit> CREATOR = new Creator<Outfit>() {
@Override
public Outfit createFromParcel(Parcel in) {
return new Outfit(in);
}
@Override
public Outfit[] newArray(int size) {
return new Outfit[size];
}
};
public String getmName() {
return mName;
}
public String getmImageUrl() {
return mImageUrl;
}
慕村9548890
相关分类