Realm模型真的需要getter和setter吗?

时间:2016-09-20 19:41:41

标签: android realm

如果Realm Model中的字段实际需要getter和setter,我无法在任何地方找到它。例如,https://realm.io/docs/java/latest/api/io/realm/RealmObject.html处的文档说

  

RealmObject唯一的限制是不允许使用字段   最后,瞬间'或者不稳定。任何方法以及公共方法   字段是允许的。提供自定义构造函数时,公开   必须声明没有参数的构造函数并且为空。

     

使用Ignore注释的字段没有这些限制,也没有   需要吸气剂或吸气剂。

这似乎暗示了getter和setter对于非忽略字段是必需的。然而,https://realm.io/docs/java/latest/#customizing-objects的文档说

  

可以像使用POJO一样使用RealmObjects。延伸自   RealmObject,你可以让字段公开,并使用简单   分配而不是setter和getter。

然后显示一个没有任何getter和setter的Realm Model的代码,而是有我们应该使用的公共字段。真?我认为Realm甚至没有在实际字段中存储任何值,所以从它们读取和写入可能是一个坏主意?我的意思是他们的调试文档https://realm.io/docs/java/latest/#debugging状态:

  

不幸的是,这些值是错误的,因为字段值不是   用过的。 Realm在幕后创建一个代理对象并覆盖   getter和setter以访问Realm中的持久数据

那么有人可以赐教我吗?我可以跳过getter和setter,只是坚持公共领域吗?对此有没有全面的文档?

1 个答案:

答案 0 :(得分:4)

在大多数情况下,

public字段都可以工作,因为Realm 2.0.0甚至可以在RealmObjects的构造函数中工作(允许“默认值”),并且如果您直接访问该属性,则可以正常工作。

例如,

SomeObject obj = results.get(i);
obj.blah = "Blahblah";

这是有效的,因为管理的RealmObjects的字段访问由Realm-Transformer转换为代理getter / setter调用(在这种情况下,转换为realmSet$blah方法)。

这是自0.88.0以来的情况,当时Realm开始作为Gradle插件提供。

但是,{strong>限制主要是proxy field access doesn't run in instrumentation tests, because the androidTestCompile scope does not run the transformer