Tipo de anotação RealmModule
-
@Retention(RUNTIME) @Target(TYPE) @Inherited public @interface RealmModule
Por padrão, um Realm pode armazenar todas as classes que estendem o RealmObject em um projeto. No entanto, se você quiser restringir um Realm para conter apenas um subconjunto de classes ou quiser compartilhá-las entre um projeto de biblioteca e um projeto de aplicativo, você deve usar um RealmModule.Um RealmModule é uma collection de classes que estende o RealmObject que pode ser combinada com outros RealmModule para criar o esquema para um Realm. Isso facilita o controle da versão e a migração desses Realms.
Um RealmModule pode ser um módulo de biblioteca ou um módulo de aplicativo. A distinção é feita definindo
library = true
. A configuraçãolibrary = true
normalmente só é relevante para autores de bibliotecas. Veja abaixo mais detalhes.Atualmente, não é possível ter várias declarações do RealmModule em um único arquivo. Se você tiver mais de um RealmModule, terá que usar arquivos Java separados para cada módulo.
Módulos e bibliotecas do Realm
O comportamento padrão do Realm é criar automaticamente um RealmModule chamadoDefaultRealmModule
que contém todas as classes que estendem o RealmObject em um projeto. Este módulo é automaticamente conhecido pelo Realm.Esse comportamento é problemático ao combinar um projeto de biblioteca e um projeto de aplicativo que ambos usam o Realm. Isso ocorre porque o
DefaultRealmModule
será criado para o projeto da biblioteca e o projeto do aplicativo, o que fará com que o projeto falhe com erros de definição de classe duplicados.Os autores da biblioteca são responsáveis por evitar esse conflito usando módulos explícitos em que
library = true
está definido. Isso desabilita a geração do DefaultRealmModule para o projeto da biblioteca e permite que a biblioteca seja incluída no projeto do aplicativo que também usa o Realm. Isso significa que os projetos de bibliotecas que usam o Realm internamente são obrigados a especificar um módulo específico usandoRealmConfiguration.modules()
.Os desenvolvedores de aplicativos não são obrigados a especificar nenhum módulo, pois implicitamente usam o
DefaultRealmModule
, mas agora têm a opção de adicionar as classes do projeto de biblioteca ao seu esquema usandoRealmConfiguration.addModule()
.- Veja também:
- Exemplo de um projeto utilizando módulos
-
-
Resumo do elemento opcional
Elementos opcionais Modificador e tipo Elemento opcional Descrição boolean
allClasses
Em vez de adicionar todas as classes do Realm manualmente a um módulo, defina este booleano como true para incluir automaticamente todas as classes do Realm neste projeto.Class<?>[]
classes
Especifica as classes que estendem o RealmObject que devem fazer parte deste módulo.RealmNamingPolicy
classNamingPolicy
A política de nomenclatura foi aplicada a todas as classes que fazem parte deste módulo.RealmNamingPolicy
fieldNamingPolicy
A política de nomenclatura aplicada a todos os nomes de campo em todas as classes que fazem parte deste módulo.boolean
library
Definir isso como verdadeiro marcará este módulo como um módulo de biblioteca.
-
-
-
Detalhes do elemento
-
Internas
biblioteca booleana
Definir isso como verdadeiro marcará este módulo como um módulo de biblioteca. Isso evitará que o Realm gere oDefaultRealmModule
contendo todas as classes. Isso é exigido pelas bibliotecas para que não interfiram com os Realms em execução no código do aplicativo, mas também significa que todas as bibliotecas que usam o Realm devem usar explicitamente um módulo e não podem confiar na presença do módulo padrão. A criação de módulos de biblioteca e módulos normais no mesmo projeto não é permitida e fará com que o processador de anotações lance uma exceção.- Padrão:
- false
-
-
-
allClasses
boolean allClasses
Em vez de adicionar todas as classes do Realm manualmente a um módulo, defina este booleano como true para incluir automaticamente todas as classes do Realm neste projeto. Isso não inclui classes de outras bibliotecas que devem ser expostas usando seu próprio módulo. ConfigurarallClasses = true
eclasses()
fará com que o processador de anotação lance uma exceção.- Padrão:
- false
-
-
-
classes
Classe<?>[] classes
Especifica as classes que estendem o RealmObject que devem fazer parte deste módulo. Somente classes neste projeto podem ser incluídas. Classes de outras bibliotecas devem ser expostas usando seu próprio módulo. ConfigurarallClasses = true
eclasses()
fará com que o processador de anotação lance uma exceção.- Padrão:
- {}
-
-
-
classNamingPolicy
RealmNamingPolicy classNamingPolicy
A política de nomenclatura foi aplicada a todas as classes que fazem parte deste módulo. A política padrão éRealmNamingPolicy.NO_POLICY
. Para definir uma política de nomenclatura para todos os campos nas classes, utilizefieldNamingPolicy()
.É possível substituir a política de nomenclatura especificada no módulo em cada classe usando a anotação
RealmClass
.Se uma classe fizer parte de vários módulos, a mesma política de nomenclatura deverá ser aplicada a ambos os módulos, caso contrário, um erro será gerado.
- Padrão:
- io.realm.annotations.RealmNamingPolicy.NO_POLICY
-
-
-
fieldNamingPolicy
RealmNamingPolicy fieldNamingPolicy
A política de nomenclatura aplicada a todos os nomes de campo em todas as classes que fazem parte deste módulo. A política padrão éRealmNamingPolicy.NO_POLICY
. Para definir uma política de nomenclatura para nomes de classe, useclassNamingPolicy()
.É possível substituir esta política de nomenclatura usando
RealmClass.fieldNamingPolicy()
ouRealmField.name()
.- Padrão:
- io.realm.annotations.RealmNamingPolicy.NO_POLICY
-
-