Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否有可能从Firebase获取可以映射到Java中多个子类的数据?_Java_Firebase_Polymorphism - Fatal编程技术网

是否有可能从Firebase获取可以映射到Java中多个子类的数据?

是否有可能从Firebase获取可以映射到Java中多个子类的数据?,java,firebase,polymorphism,Java,Firebase,Polymorphism,如果我有这样一个基类基类: public Base { private String mVar1, mVar2; public String getVar1(){ return mVar1; } public void setVar1(String var1){ mVar1 = var1; } public String getVar2(){ return mVar2; } p

如果我有这样一个基类基类:

public Base
{
    private String mVar1, mVar2;

    public String getVar1(){
        return mVar1;
    }

    public void setVar1(String var1){
        mVar1 = var1;
    }

    public String getVar2(){
        return mVar2;
    }

    public void setVar2(String var2){
        mVar2 = var2;
    }
}
一个名为ChildA的子类:

public ChildA extends Base
{
    private int mVal;

    public int getVal(){
        return mVal;
    }

    public void setVal(int val){
        mVal = val;
    }
}
还有另一个叫做ChildB的儿童班:

public ChildB extends Base
{
    private boolean mIsComplete;

    public boolean isComplete(){
        return isComplete;
    }

    public void setComplete(boolean complete){
        mIsComplete = complete;
    }
}
那么,如果子节点“someKey”包含包含ChildA和ChildB对象的数据,我如何执行类似操作:

public static void getData(DatabaseReference dbRef)
{
    final List<Base> list = new ArrayList<>();
    dbRef.child("someKey").addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot)
        {
            for(DataSnapshot snapshot : dataSnapshot.getChildren())
            {
                list.add(snapshot.getValue(Base.class));
            }

            //do something with the list...
        }

        @Override
        public void onCancelled(DatabaseError databaseError)
        {

        }
    });
}
publicstaticvoidgetdata(DatabaseReference dbRef)
{
最终列表=新的ArrayList();
dbRef.child(“someKey”).addListenerForSingleValueEvent(新的ValueEventListener()){
@凌驾
公共void onDataChange(DataSnapshot DataSnapshot)
{
对于(DataSnapshot快照:DataSnapshot.getChildren())
{
添加(snapshot.getValue(Base.class));
}
//对列表做些什么。。。
}
@凌驾
已取消的公共void(DatabaseError DatabaseError)
{
}
});
}
在dataSnapshot for循环中,我尝试了那里的方法,但是由于
Base
类没有
ChildA
ChildB
字段的getter和setter(这些方法不应该有,因为这些方法只应用于子类,而不是基类),所以没有检索到一些数据


我的另一个选择是,我必须首先检查
快照中的每个对象属于哪个类,然后使用
if/else if
语句将相应的
.class
传递到
setValue(.class)
。话虽如此,有没有更好的方法来获取映射到多个子类的数据,而无需使用一系列
if/else if
语句?

您可以通过调用super的方法覆盖子对象中的setter和getter方法,所有方法都可以工作,但这不是最佳解决方案。 比如:

@Override
public void setVar1(String var1){
    super.setVar1(var1);
}