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ção library = 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 chamado DefaultRealmModule 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 usando RealmConfiguration.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 usando RealmConfiguration.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 o DefaultRealmModule 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. Configurar allClasses = true e classes() 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. Configurar allClasses = true e classes() 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, utilize fieldNamingPolicy().

        É 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.

        Veja também:
        for more information about what setting this policy means.
        Padrão:
        io.realm.annotations.RealmNamingPolicy.NO_POLICY