注解类型 RealmModule


  • @Retention(RUNTIME)
    @Target(TYPE)
    @Inherited
    public @interface RealmModule
    默认情况下,Realm 可以存储项目中扩展 RealmObject 的所有类。 但是,如果您希望将 Realm 限制为仅包含类的子集,或者希望在库项目和应用项目之间共享这些类,则必须使用 RealmModule。

    RealmModule 是扩展 RealmObject 的类的collection,可以与其他 RealmModule 组合以创建 Realm 的模式。这样可以更轻松地控制这些 Realm 的版本控制和迁移。

    RealmModule 可以是库模块,也可以是应用模块。 通过设置library = true进行区分。 设置library = true通常只与库作者相关。 有关详细信息,请参阅下文。

    目前,单个文件中无法包含多个 RealmModule 声明。 如果您有多个 RealmModule,则必须为每个模块使用单独的 Java 文件。

    RealmModules 和库

    Realm 默认行为是自动创建一个名为DefaultRealmModule的 RealmModule,其中包含扩展项目中 RealmObject 的所有类。Realm 会自动识别此模块。

    当组合使用 Realm 的库项目和应用项目时,这种行为会出现问题。 这是因为将为库项目和应用项目创建DefaultRealmModule ,这将导致项目失败并出现重复的类定义错误。

    库作者有责任使用设置了library = true的显式模块来避免这种冲突。 这会禁用为库项目生成 DefaultRealmModule,并允许将该库包含在也使用 Realm 的应用项目中。 这意味着在内部使用 Realm 的库项目需要使用RealmConfiguration.modules()指定特定模块。

    应用开发者无需指定任何模块,因为他们隐式使用DefaultRealmModule ,但他们现在可以选择使用RealmConfiguration.addModule()将库项目类添加到其模式中。

    另请参阅:
    使用模块的项目示例
    • 可选元素摘要

      可选元素 
      修饰符和类型 可选元素 说明
      boolean allClasses
      无需手动将所有 Realm 类添加到模块中,只需将此布尔值设置为 true,即可自动包含此项目中的所有 Realm 类。
      Class<?>[] classes
      指定应该属于此模块一部分的扩展 RealmObject 的类。
      RealmNamingPolicy classNamingPolicy
      命名策略适用于该模块的所有类部分。
      RealmNamingPolicy fieldNamingPolicy
      命名策略适用于该模块的所有类部分中的所有字段名称。
      boolean library
      将其设置为 true 会将该模块标记为库模块。
    • 元素详细信息

      • 布尔库
        将其设置为 true 会将该模块标记为库模块。 这将阻止 Realm 生成包含所有类的DefaultRealmModule 。 这是库所要求的,这样它们就不会干扰在应用代码中运行的 Realm,但这也意味着使用 Realm 的所有库都必须显式使用模块,并且不能依赖于存在的默认模块。 不允许在同一项目中创建库模块和普通模块,否则会导致注解处理器抛出异常。
        默认:
        false
      • allClasses

        boolean allClasses
        无需手动将所有 Realm 类添加到模块中,只需将此布尔值设置为 true,即可自动包含此项目中的所有 Realm 类。 这不包括其他库中必须使用自己的模块公开的类。 同时设置allClasses = trueclasses()将导致注解处理器抛出异常。
        默认:
        false
      • <?>[] 类
        指定应该属于此模块一部分的扩展 RealmObject 的类。 只能包含此项目中的类。 其他库中的类必须使用自己的模块公开。 同时设置allClasses = trueclasses()将导致注解处理器抛出异常。
        默认:
        {}