【问题标题】:Static field not being recognized as persistable by Realm Java静态字段未被 Realm Java 识别为可持久化
【发布时间】:2016-07-22 03:55:17
【问题描述】:

Realm 给我一个错误,抱怨我的班级“必须至少有 1 个可持久字段”。此类有 1 个静态字段用于在我的应用中存储首选项选项,以及一些其他静态方法。

缩短代码:

public class StreamingPreferences extends RealmObject {
     public static RealmList<RealmString> serviceStreamingPreferences;
}

Realm appears to support static fields 和我的自定义 RealmString 类扩展了 RealmObject,RealmList 也是如此。我对 Realm 完全陌生,这是我模型中唯一如果不添加一些非静态字段就无法工作的部分。有什么想法吗?

【问题讨论】:

  • 您确定您使用的 Realm 版本支持静态字段吗?
  • 是的,我使用的是 1.1 版
  • 领域字符串是什么样子的
  • 这似乎是 ClassMetaData 类中 Realm 的 categorizeClassElements() 函数中的一个错误。你应该与 Team Realm 的某个人取得联系,或者在 Realm 的 GitHub 上提出问题。暂时您可以通过在 StreamingPreferences 类中添加一个原始类型的字段来解决此问题。例如私人 int tempField;
  • 谢谢 Viraj,我提出了 issue 并传递了你的猜测。

标签: java android realm


【解决方案1】:

支持静态字段,因为它们在 RealmObject 的类中是允许的。

它们会被自动忽略,不会持久化。

this comment中指定。

【讨论】:

    【解决方案2】:

    错误消息 - “必须包含至少 1 个可持久字段”

    根本原因 - 在您的 RealmObject 类中仅使用静态字段

    原因 - Realm 允许我们在 RealmObject 类中拥有静态字段,但是由于静态字段不属于该类的实例(它们属于该类),因此静态字段具有给定类的所有实例的相同副本。由于 Realm 忽略所有静态字段,它不接受只有静态字段的 RealmObject,我们必须将至少一个非静态字段与一个或多个静态字段放在一起。

    历史 - 正如此处https://github.com/realm/realm-java/issues/464 所讨论的,Realm 曾经将静态字段作为 RealmObject 的一部分进行处理,但在讨论后,Realm 团队同意忽略所有静态字段。

    这是允许的

    public class Test extends RealmObject {
        /* One non static filed */
        private int test1;
        /* One or more static filed(s) */
        public static int test2;
    }
    

    这是不允许的

    public class Test extends RealmObject {
        /* Only static field(s) */
        public static int test1;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-05
      • 1970-01-01
      • 2020-02-13
      • 2022-12-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多