Política de nomeação de Realm Enum
- java.lang.Object
-
- java.lang.Enum<RealmNamingPolicy>
-
- io.realm.annotations.RealmNamingPolicy
-
- 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.
-
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 doRealm
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".
-
Sempre que um
_
ou$
for encontrado. Os exemplos são "_FirstName", "_First_Name" e "$First$Name", que se tornam "First" e "Name". -
Sempre que você alternar de um caractere minúsculo para um caractere maiúsculo, conforme identificado por
Character.isUpperCase(int)
eCharacter.isLowerCase(int)
. Por exemplo, "FirstName", que se torna "First" e "Name". -
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)
eCharacter.isLowerCase(int)
. Exemplo é "FIRSTName" que se torna "FIRST" e "Name. - 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.
- 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
-
-
Resumo da constante enumeração
Constantes de enumeração Constante Enum Descrição CAMEL_CASE
O nome na classe de modelo Java é convertido em camelCase, ou seja,IDENTITY
O nome na classe de modelo Java é usado como está internamente.LOWER_CASE_WITH_UNDERSCORES
O nome na classe de modelo Java é convertido em minúsculas com cada palavra separada por_
.NO_POLICY
Nenhuma política é aplicada.PASCAL_CASE
O nome na classe de modelo Java é convertido para PascalCase, ou seja,
-
Resumo do método
Todos os métodos Métodos estáticos Métodos concretos Modificador e tipo Método Descrição static RealmNamingPolicy
valueOf(String name)
Retorna a constante de enumeração deste tipo com o nome especificado.static RealmNamingPolicy[]
values()
Retorna uma matriz contendo as constantes desta enumeração, na ordem em que são declaradas.-
Métodos herdados da classe java.lang.enumeração
compareTo, equals, getDeclaringClass, hashCode, name, ordinal, toString, valueOf
-
-
-
-
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 emRealmClass.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 especificadoNullPointerException
- se o argumento for nulo
-
-