我有一个服装类,它有一个抽象类作为其属性之一。当我侦听数据库中的更改时,出现此错误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 等。服装.javapublic 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;}
1 回答
![?](http://img1.sycdn.imooc.com/54584cfb0001308402200220-100-100.jpg)
慕村9548890
TA贡献1884条经验 获得超4个赞
您的具体Outfit类具有定义的字段和属性Item:
public class Outfit implements Parcelable{
private List<Item> itemList = new ArrayList<>();
...
public List<Item> getItemList()
这意味着 Firebase SDK 将尝试实例化Item,这是不可能的,因为它是抽象的。您很可能希望 Firebase 在Item读取数据时实例化正确的(具体)子类型,但它无法知道这是什么子类型。
您要么必须标记Item为非抽象,要么必须将 标记itemList为具有特定的具体子类型Item.
添加回答
举报
0/150
提交
取消