Política de nomeação de Realm Enum

  • Todas as interfaces implementadas:
    Serializable, Comparable<RealmNamingPolicy>

    public enum RealmNamingPolicy
    extends Enum<RealmNamingPolicy>
    Esse enum define as possíveis maneiras pelas quais os nomes de classe e campo podem ser mapeados do que é usado em Java para o nome usado internamente no arquivo Realm.

    Exemplos em que isso é útil:

    • Para oferecer suporte a duas classes de modelo com o mesmo nome simples, mas em pacotes diferentes.
    • Para facilitar o trabalho com esquemas de plataforma cruzada, as convenções de nomenclatura são diferentes.
    • Para usar um nome de classe Java maior que o limite de 57 caracteres imposto pelo Realm.
    • Para alterar um nome de campo em Java sem forçar os usuários do aplicativo por um processo de migração.
    Dependendo de onde a política é aplicada, ela terá semântica ligeiramente diferente:
    • Se aplicado a RealmModule.classNamingPolicy() , todas as classes que fazem parte desse módulo serão afetadas. 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.
    • Se aplicado a RealmModule.fieldNamingPolicy() , todos os campos persistentes em todas as classes que fazem parte deste módulo serão afetados.
    • Se aplicado a RealmClass.fieldNamingPolicy() , todos os campos dessa classe serão afetados. Isso substituirá qualquer política de nomenclatura de campo especificada em um módulo.

    Um exemplo disso:

     
     \@RealmClass(name = "__person", fieldNamingPolicy = RealmNamingPolicy.LOWER_CASE_WITH_UNDERSCORES)
     public class Person implements RealmModel { // is converted to "__person" internally
         public string firstName; // Is converted to "first_name" internally
     }
     
     

    Escolher um nome interno diferente do nome usado nas classes de modelo Java tem as seguintes implicações:

    • Consultas sobre DynamicRealm devem usar o nome interno. Query em instâncias normais do Realm devem continuar utilizando o nome como ele é definido na classe Java.
    • As migrações devem usar o nome interno ao criar classes e campos.
    • Erros de esquema relatados usarão os nomes internos.

    Ao converter automaticamente nomes de variáveis Java, cada nome de variável é normalizado dividindo-o em uma lista de palavras que são unidas usando as regras do formato de destino. As seguintes heurísticas são usadas para determinar o que constitui uma "palavra".

    1. Sempre que um _ ou $ for encontrado. Os exemplos são "_FirstName", "_First_Name" e "$First$Name", que se tornam "First" e "Name".
    2. Sempre que você alternar de um caractere minúsculo para um caractere maiúsculo, conforme identificado por Character.isUpperCase(int) e Character.isLowerCase(int). Por exemplo, "FirstName", que se torna "First" e "Name".
    3. Sempre que você alternar de mais de um caractere maiúsculo para um minúsculo. A última letra maiúscula é assumida como parte da próxima palavra. Isso é identificado usando Character.isUpperCase(int) e Character.isLowerCase(int). Exemplo é "FIRSTName" que se torna "FIRST" e "Name.
    4. Alguns caracteres, como Emoction, não são caracteres maiúsculos nem minúsculos, portanto, farão parte da palavra atual. Exemplos são "meu e "meu, que são tratados como uma palavra.
    5. A notação húngara, ou seja, os nomes de variáveis que começam com "m" em minúsculas seguidos por uma letra maiúscula, são removidos e não são considerados parte de nenhuma palavra. Exemplo é "mFirstName" e "mFIRSTName" que se torna "First" e "Name.

    Observe que alterar o nome interno NÃO afeta a importação de dados do JSON. Os dados JSON ainda devem seguir os nomes definidos na classe Realm Java.

    Quando se trata de analisar JSON usando bibliotecas padrão como Moshi, GSON ou JSON, é importante ter em mente que essas bibliotecas definem a transformação de JSON para Java, enquanto a configuração de nomes de Realm internos define a transformação de Java para o Arquivo de Realm.

    Isso significa que, para importar dados do JSON para o Realm usando essas bibliotecas, você ainda precisará fornecer as anotações da biblioteca do analisador JSON e do Realm.

    Usando o Moshi, pareceria algo assim:

     
     public class Person extends RealmObject {
         \@Json(name = "first_name") // Name used in JSON input.
         \@RealmField(name = "first_name") // Name used internally in the Realm file.
         public string firstName; // name used in Java
     }
     
     
    Veja também:
    RealmModule, RealmClass, RealmField
    • Detalhes da constante enumeração

      • NO_POLICY

        public static final RealmNamingPolicy NO_POLICY
        Nenhuma política é aplicada. Essa política não substituirá nenhuma política definida em um elemento pai, por exemplo, se definida em RealmClass.fieldNamingPolicy(), a política do módulo ainda se aplicará aos nomes dos campos.

        Se dois módulos entrarem em desacordo com a política e um deles for NO_POLICY, o outro será escolhido sem que um erro seja gerado.

        Esta política é o padrão.

      • IDENTIDADE

        public static final RealmNamingPolicy IDENTITY
        O nome na classe de modelo Java é usado como está internamente.
      • CAEL_CASE

        public static final RealmNamingPolicy CAMEL_CASE
        O nome na classe de modelo Java é convertido em camelCase, ou seja, todas as palavras são unidas com a primeira letra da primeira palavra em minúsculas e a primeira letra de todas as palavras subsequentes em maiúsculas. Este é o esquema de nomenclatura padrão em Java, Kotlin, Swift e JavaScript.

        Exemplos: "firstName", "FirstName", "mFirstName", "FIRST_NAME", "First$Name", tudo se torna "firstName".

      • PAscal_Case

        public static final RealmNamingPolicy PASCAL_CASE
        O nome na classe de modelo Java é convertido em PascalCase, ou seja, todas as palavras são unidas com a primeira letra de todas as palavras em maiúscula. Este é o esquema de nomenclatura padrão no .NET.

        Exemplos: "firstName", "FirstName", "mFirstName", "FIRST_NAME", "First$Name", tudo se torna "FirstName".

      • lower_Case_WITH_UNDERSCORES

        public static final RealmNamingPolicy LOWER_CASE_WITH_UNDERSCORES
        O nome na classe de modelo Java é convertido em minúsculas com cada palavra separada por _. Este é o esquema de nomenclatura padrão em C++.

        Exemplos: "firstName", "FirstName", "mFirstName", "FIRST_NAME", "First$Name", tudo se torna "first_name".

    • Detalhes do método

      • values

        public static RealmNamingPolicy[] values()
        Retorna uma matriz contendo as constantes deste tipo de enum, na ordem em que são declaradas. Este método pode ser utilizado para iterar sobre as constantes da seguinte forma:
        para (RealmNamingPolicy c : RealmNamingPolicy.values())
            System.out.println(c);
        
        Retorna:
        uma matriz contendo as constantes desse tipo de enumeração, na ordem em que são declaradas
      • valor de

        public static RealmNamingPolicy valueOf​(String name)
        Retorna a constante de enum deste tipo com o nome especificado. A string deve corresponder exatamente a um identificador usado para declarar uma constante de enum nesse tipo. (Caracteres estranhos do espaço em branco não são permitidos.)
        Parâmetros:
        name - o nome da constante de enumeração a ser retornada.
        Retorna:
        a constante da enumeração com o nome especificado
        Lançamentos:
        IllegalArgumentException - se este tipo de enumeração não tiver constante com o nome especificado
        NullPointerException - se o argumento for nulo