2016-09-20 80 views
9

如果在领域模型中实际需要获取者和设置者,我无法在任何地方找到它。例如,在https://realm.io/docs/java/latest/api/io/realm/RealmObject.html的文件说Realm模型实际上是否需要getters和setter?

一个RealmObject具有的唯一的限制是字段不允许 是最终,瞬时”或挥发。任何方法以及公共 字段都是允许的。在提供自定义构造函数时,必须声明一个不带参数的公共构造函数并将其设为空。

用Ignore注释的字段没有这些限制,并且不要求 需要获取者或设置者。

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

这是可能的使用RealmObjects几乎像POJOs。从 扩展RealmObject,你可以让这些字段公开,并使用简单的 赋值而不是setter和getter。

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

不幸的是,这些值是错误的,因为这个字段值不使用 。境界创建幕后代理对象和覆盖 getter和setter方法,以访问王国

所以可能有人请赐教持久保存的数据?我可以跳过吸气剂和吸附剂并坚持使用公共领域吗?有没有关于此的全面文档?

回答

4

publicpublic字段在大多数情况下都能正常工作,而且自Realm 2.0.0以来,它们甚至可以在RealmObjects的构造函数中工作(允许“默认值”),如果直接访问该属性,则可以工作。

例如,

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

该工程,因为管理RealmObjects'字段访问由境界变压器转化到代理的getter/setter电话(在此情况下,进realmSet$blah方法)。

自0.88.0开始,Realm开始作为Gradle插件提供时,情况就是如此。

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

+0

我个人使用getters/setter。 – EpicPandaForce

+1

好吧,如果我理解正确:字段访问工作正常,除了RealmObject构造函数和'androidTest /'中的任何代码。所以如果我能忍受这一点,我可以跳过得分手和二传手? –

+0

是!你看到它是正确的(虽然如我所说,我更喜欢setter/getters,因为它们看起来更稳定) – EpicPandaForce

相关问题