领域调用setter

我使用领域作为数据库和kotlin作为语言。
我为属性实现了我的自定义setter方法。

Realm能以某种方式称呼这个设定者吗?

例如:

open class Human(): RealmObject() { open var Name: String = "" set(value) { setName(value) } } 

现在我也有一个属性changeDate ,这将是很好,如果我可以在setName自动设置changeDate新的实际日子。

但是如果Realm也调用这个方法,我不能这样做。

谢谢

我已经用Kotlin 1.1.1和Realm 3.0.0试过了,它不会调用自定义setter,它以某种方式赋值(这意味着它甚至可以在你的自定义setter为空的情况下工作)有点意外)。

编辑:看着生成的代码和调试器。

当您使用连接到Realm的对象时,它是代理类的一个实例,它是您在代码中使用的类的子类。 当你读取这个实例的属性时,对getter的调用就会下降到本地调用,以访问Realm内部磁盘上存储的值。

同样,调用setter最终会获得本地调用来设置适当的值。 这就解释了为什么setter不会被调用:Realm不需要调用setter,因为它不会急切地将值加载到内存中,代理只是指向Realm中的实际数据,并且只要您阅读价值,它会从那里读取它。

至于这与Kotlin代码有什么关系,只要使用field关键字(大部分),就会发生对代理的setter和getter访问Realm内部数据的调用。

 var Name: String = "" get() { return field // this calls `String realmGet$Name()` on the proxy } set(value) { field = value // this calls `void realmSet$Name(String value)` on the proxy }