如果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状态:
那么有人可以赐教我吗?我可以跳过getter和setter,只是坚持公共领域吗?对此有没有全面的文档?不幸的是,这些值是错误的,因为字段值不是 用过的。 Realm在幕后创建一个代理对象并覆盖 getter和setter以访问Realm中的持久数据
答案 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。