Firebase Java POJO和仅限本地的字段

时间:2018-02-26 06:22:23

标签: java firebase pojo

鉴于以下POJO示例存储仅适用于此处运行的应用的本地字段,其他任何人也不会使用Firebase数据:

@IgnoreExtraProperties
public class DispatchModel {
    private String isotimestamp;
    private String date_time;
    private String event_uuid;
    //...
    private String locallyCreatedValue;
    //...constructor, getters, setters
}

鉴于我的Firebase数据中存储了前三个字段,并且在应用运行时期间将localCreatedValue添加到我的POJO,是否有办法从POJO实例自动获取所有本地添加的内容并应用于新实例何时从onChildChanged事件发生更新?

就像现在一样,我必须手动获取所有本地字段值并在新实例上设置它们:

@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
    DispatchModel newModel = dataSnapshot.getValue(DispatchModel.class);
    // get list index of expiring instance
    // get instance of old item at list index
    // index = ...
    // old = ...

    // repeat this for every local item :-/
    newModel.setLocallyCreatedValue(old.getLocallyCreatedValue);

    dispatchList.set(index, newModel);
}

我计划拥有相当多的本地字段,这是我唯一的选择吗? Firebase提供的功能是否使其自动对象实例化对我的附加功能更加友好?我并不热衷于创建不同的POJO来并行跟踪Firebase POJO。这会导致数据错误来自分离的数据更新和谨慎的执行计划。

1 个答案:

答案 0 :(得分:0)

如果您的所有本地创建的值都表示为POJO中的标准getter和setter,那么您要么必须手动复制它们,要么编写一些相当强烈的Java反射代码来检查类,以某种方式找出哪些属性是本地的(注释?从已知列表中包含/排除?)并且应该被复制,然后实际执行该工作。你将无法获得这个"免费"使用一些实用程序(除非碰巧有一些第三方库解决了这个特定问题,我对此表示怀疑)。

请考虑将本地创建的值存储为Map,然后简单地在对象之间复制该地图。但是,如果这些值完全不同,那么您就会有未知的类型。

或者在JavaScript中重写您的代码,它具有简单的属性枚举。 : - )