注解类型 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 会将该模块标记为库模块。
-
-
-
-
类
类<?>[] 类
指定应该属于此模块一部分的扩展 RealmObject 的类。 只能包含此项目中的类。 其他库中的类必须使用自己的模块公开。 同时设置allClasses = true
和classes()
将导致注解处理器抛出异常。- 默认:
- {}
-
-
-
classNamingPolicy
RealmNamingPolicy classNamingPolicy
命名策略适用于该模块的所有类部分。 默认策略为RealmNamingPolicy.NO_POLICY
。 要为类中的所有字段定义命名策略,请使用fieldNamingPolicy()
。可以使用
RealmClass
注解覆盖每个类中模块中指定的命名策略。如果一个类是多个模块的一部分,则必须对这两个模块应用相同的命名策略,否则会引发错误。
- 默认:
- io.realm.annotations.RealmNamingPolicy.NO_POLICY
-
-
-
fieldNamingPolicy
RealmNamingPolicy fieldNamingPolicy
命名策略适用于该模块的所有类部分中的所有字段名称。 默认策略为RealmNamingPolicy.NO_POLICY
。 要定义类名称的命名策略,请使用classNamingPolicy()
。可以使用
RealmClass.fieldNamingPolicy()
或RealmField.name()
覆盖此命名策略。- 默认:
- io.realm.annotations.RealmNamingPolicy.NO_POLICY
-
-