鉴于以下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。这会导致数据错误来自分离的数据更新和谨慎的执行计划。
答案 0 :(得分:0)
如果您的所有本地创建的值都表示为POJO中的标准getter和setter,那么您要么必须手动复制它们,要么编写一些相当强烈的Java反射代码来检查类,以某种方式找出哪些属性是本地的(注释?从已知列表中包含/排除?)并且应该被复制,然后实际执行该工作。你将无法获得这个"免费"使用一些实用程序(除非碰巧有一些第三方库解决了这个特定问题,我对此表示怀疑)。
请考虑将本地创建的值存储为Map,然后简单地在对象之间复制该地图。但是,如果这些值完全不同,那么您就会有未知的类型。
或者在JavaScript中重写您的代码,它具有简单的属性枚举。 : - )