Android领域子类实例方法

时间:2015-08-13 14:29:44

标签: java android realm

我已经阅读了很多关于Realm的内容,它似乎是一个非常简洁的工具,我很乐意尝试一下;但是,我已经在几个不同的地方读到Android版本不支持RealmObject子类的非静态方法。

这在their documentation中并不完全清楚。这意味着不支持非静态方法,但在FAQ部分中,为什么我需要为所有字段设置getter和setter?,它们使用public ,非静态方法。

此外,它在this文章中非常清楚地表明:

  

在模型类中使用任何其他方法会出现编译错误。想一想......

     

是的..您不能使用toString(),静态方法,甚至不能使用模型类中的其他行为方法。

所以我有点困惑。我知道我不能有自定义的getter / setter;我不喜欢它,但它不是一个交易破坏者。但是不能拥有任何非静态实例方法是另一回事。

那是哪个?我可以在RealmObject子类中使用非静态实例方法吗?

感谢。

1 个答案:

答案 0 :(得分:4)

你是对的,你不能有自定义的getter和setter。

允许什么:

  • 仅限私有实例字段。
  • 仅限默认的getter和setter方法。
  • 静态字段,包​​括公共字段和私有字段。
  • 静态方法。
  • 使用无方法实现接口。

什么是不允许的:

  • 自定义getter和setter
  • 从非RealmObject扩展
  • 覆盖toString()
  • 上的equals()
  • 其他自定义非静态方法

但是they are working on it

要清楚,RTFM:

  

请注意,getm和setter将被RealmObjects在后面使用的生成的代理类覆盖,因此您添加到getter&的任何自定义逻辑都将被覆盖。实际上不会执行setter   的限制
  由于代理类如何覆盖模型类中的getter和setter,因此对模型类中允许的内容有一些限制。

     

由于代理类如何覆盖模型中的getter和setter   类对模型中允许的内容有一些限制   类:

Only private instance fields.
Only default getter and setter methods.
Static fields, both public and private.
Static methods.
Implementing interfaces with no methods.
     

这意味着目前无法扩展任何其他内容   比RealmObject或覆盖像toString()或equals()这样的方法。   此外,它只能实现接口。

Source