【发布时间】: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 类没有用于 ChildA 和 ChildB 字段的 getter 和 setter(它不应该,因为这些方法只适用于子类,而不适用于基类)。
我的另一个选择是我必须首先检查snapshot 中的每个对象属于哪个类,然后使用if/else if 语句将适当的<classname>.class 传递给setValue(<classname>.class)。话虽如此,有没有更好的方法来获取映射到多个子类的数据而不使用一系列if/else if 语句?
【问题讨论】:
标签: java firebase polymorphism