【问题标题】:Is it possible to get data from Firebase that can map to multiple child classes in Java?是否可以从 Firebase 获取可以映射到 Java 中多个子类的数据?
【发布时间】:2017-02-26 06:35:56
【问题描述】:

如果我有一个像这样的基类 Base:

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)
        {

        }
    });
}

在 dataSnapshot for 循环中,我尝试了那里的内容,但由于 Base 类没有用于 ChildAChildB 字段的 getter 和 setter(它不应该,因为这些方法只适用于子类,而不适用于基类)。

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

【问题讨论】:

    标签: java firebase polymorphism


    【解决方案1】:

    您可以通过调用 super 的方法覆盖子对象中的 setter 和 getter 方法,一切都会正常工作,但这不是最好的解决方案。 喜欢:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-27
      • 1970-01-01
      • 1970-01-01
      • 2012-09-07
      • 1970-01-01
      • 2023-02-07
      • 2019-08-02
      • 2017-02-08
      相关资源
      最近更新 更多