io.realm.anotaciones
Interfaces implementadas:
De forma predeterminada, un Realm puede almacenar todas las clases que extienden RealmObject en un proyecto. Sin embargo, si desea restringir un Realm para que solo contenga un subconjunto de clases o compartirlas entre un proyecto de biblioteca y un proyecto de aplicación, debe usar un RealmModule. Un RealmModule es una colección de clases que extienden RealmObject y que se puede combinar con otros RealmModules para crear el esquema de un Realm. Esto facilita el control del control de versiones y la migración de esos Realms.
Un RealmModule puede ser un módulo de biblioteca o un módulo de aplicación. La distinción se realiza mediante la configuración library = true La configuración library = true normalmente solo es relevante para los autores de bibliotecas. Consulte más detalles a continuación.
Actualmente, no es posible tener varias declaraciones de RealmModule en un solo archivo. Si tiene más de un RealmModule, deberá usar archivos Java separados para cada módulo.
Módulos y bibliotecas de Realm
El comportamiento predeterminado de Realm es crear automáticamente un RealmModule llamado DefaultRealmModule que contiene todas las clases que extienden RealmObject en un proyecto. Realm reconoce automáticamente este módulo.
Este comportamiento es problemático al combinar un proyecto de biblioteca y un proyecto de aplicación que usan Realm. Esto se debe a que se creará el DefaultRealmModule tanto para el proyecto de biblioteca como para el de aplicación, lo que provocará que el proyecto falle con errores de definición de clase duplicada.
Los autores de bibliotecas son responsables de evitar este conflicto mediante el uso de módulos explícitos donde library = true esté definido. Esto deshabilita la generación del DefaultRealmModule para el proyecto de biblioteca y permite que la biblioteca se incluya en el proyecto de aplicación que también usa Realm. Esto significa que los proyectos de biblioteca que usan Realm internamente deben especificar un módulo específico usando RealmConfiguration.modules() .
Los desarrolladores de aplicaciones no necesitan especificar ningún módulo, ya que utilizan implícitamente DefaultRealmModule , pero ahora tienen la opción de agregar las clases del proyecto de biblioteca a su esquema usando RealmConfiguration.addModule() .
Resumen de elementos opcionales
Modificador y Tipo | Elemento opcional y descripción |
|---|---|
booleanopúblico | En lugar de agregar manualmente todas las clases de Realm a un módulo, configure este valor booleano como verdadero para incluir automáticamente todas las clases de Realm en este proyecto. |
Política de nombres de dominio público | La política de nombres se aplica a todas las clases que forman parte de este módulo. |
Especifica las clases que extienden RealmObject que deben ser parte de este módulo. | |
Política de nombres de dominio público | La política de nomenclatura aplicada a todos los nombres de campos en todas las clases que forman parte de este módulo. |
booleanopúblico | Configurar esto como verdadero marcará este módulo como un módulo de librería. |
Detalle del elemento
todas las clases |
|---|
En lugar de agregar manualmente todas las clases de Realm a un módulo, configure este booleano como verdadero para incluir automáticamente todas las clases de Realm en este proyecto. Esto excluye las clases de otras bibliotecas, que deben exponerse mediante su propio módulo. Configurar Por defecto:
|
Política de nombres de clase |
|---|
La política de nombres se aplica a todas las clases de este módulo. La política predeterminada es RealmNamingPolicy.NO_POLICY. Para definir una política de nombres para todos los campos de las clases, utilice fieldNamingPolicy(). Es posible anular la política de nombres especificada en el módulo en cada clase utilizando la anotación RealmClass. Si una clase es parte de varios módulos, se debe aplicar la misma política de nombres a ambos módulos; de lo contrario, se generará un error. Por defecto:
|
clases |
|---|
Especifica las clases que extienden RealmObject y que deben formar parte de este módulo. Solo se pueden incluir las clases de este proyecto. Las clases de otras bibliotecas deben exponerse mediante su propio módulo. Si se configuran Por defecto:
|
Política de nombres de campos |
|---|
La política de nombres se aplica a todos los nombres de campo en todas las clases de este módulo. La política predeterminada es RealmNamingPolicy.NO_POLICY. Para definir una política de nombres para los nombres de clase, utilice classNamingPolicy(). Es posible anular esta política de nombres utilizando RealmClass.fieldNamingPolicy() o RealmField.name(). Por defecto:
|
Biblioteca |
|---|
Si se establece como verdadero, este módulo se marcará como módulo de biblioteca. Esto evitará que Realm genere el Por defecto:
|