열거형 RealmNamingPolicy

  • 구현된 모든 인터페이스:
    Serializable, Comparable<RealmNamingPolicy>

    public enum RealmNamingPolicy
    extends Enum<RealmNamingPolicy>
    이 열거형은 클래스 및 필드 이름을 Java에서 사용되는 이름에서 Realm 파일에서 내부적으로 사용되는 이름으로 매핑할 수 있는 가능한 방법을 정의합니다.

    유용한 예:

    • 이름은 같지만 패키지가 다른 두 모델 클래스를 지원합니다.
    • 명명 규칙이 다르기 때문에 크로스 플랫폼 스키마로 더 쉽게 작업할 수 있습니다.
    • Realm에서 시행하는 57자 제한보다 긴 Java 클래스 이름을 사용하려는 경우.
    • 앱 사용자에게 마이그레이션 프로세스를 강제하지 않고 Java에서 필드 이름을 변경하고자 하는 경우.
    정책이 적용되는 위치에 따라 의미가 약간 달라집니다.
    • RealmModule.classNamingPolicy() 에 적용하면 해당 모듈의 모든 클래스 일부가 영향을 받습니다. 클래스가 여러 모듈에 속한 경우 두 모듈에 동일한 명명 정책을 적용해야 하며, 그렇지 않으면 오류가 발생합니다.
    • RealmModule.fieldNamingPolicy() 에 적용하면 이 모듈의 모든 클래스에 있는 모든 지속 가능한 필드가 영향을 받습니다.
    • RealmClass.fieldNamingPolicy() 에 적용하면 해당 클래스의 모든 필드가 영향을 받습니다. 이는 모듈에 지정된 모든 필드 명명 정책을 재정의합니다.

    예를 들면 다음과 같습니다.

     
     \@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
     }
     
     

    Java 모델 클래스에 사용된 이름과 다른 내부 이름을 선택하면 다음과 같은 의미가 있습니다.

    • DynamicRealm 에 대한 쿼리는 내부 이름을 사용해야 합니다. 일반 Realm 인스턴스에 대한 쿼리는 Java 클래스에 정의된 이름을 계속 사용해야 합니다.
    • 마이그레이션은 클래스 및 필드를 만들 때 내부 이름을 사용해야 합니다.
    • 보고된 스키마 오류에는 내부 이름이 사용됩니다.

    Java 변수 이름을 자동으로 변환할 때 각 변수 이름은 단어 목록으로 분할된 다음 대상 형식의 규칙을 사용하여 결합되는 방식으로 정규화됩니다. 다음과 같은 휴리스틱은 "단어"를 구성하는 항목을 결정하는 데 사용됩니다.

    1. _ 또는 $ 이(가) 발생할 때마다 발생합니다. 예를 들면 '_FirstName', '_First_Name', '$First$Name'이 있으며, 이는 모두 'First' 및 'Name'이 됩니다.
    2. Character.isUpperCase(int)Character.isLowerCase(int) 으로 식별되는 소문자에서 대문자로 전환할 때마다 발생합니다. 예를 들어 'FirstName'은 'FirstName'과 'Name'이 됩니다.
    3. 하나 이상의 대문자에서 소문자로 전환할 때마다 발생합니다. 마지막 대문자는 다음 단어의 일부로 간주됩니다. 이는 Character.isUpperCase(int)Character.isLowerCase(int) 을 사용하여 식별됩니다. 예를 들어 'FIRSTName'은 'FIRST'와 'Name.
    4. 그림과 같은 일부 문자는 대문자도 소문자도 아니므로 현재 단어의 일부가 됩니다. 예를 들어 'my'와 'my '가 있으며, 이는 둘 다 하나의 단어로 취급됩니다.
    5. 헝가리어 표기법, 즉 소문자 "m"으로 시작하고 그 뒤에 대문자가 오는 변수 이름은 제거되며 어떤 단어의 일부로 간주되지 않습니다. 예를 들면 "mFirstName" 및 "mFIRSTName"이(가) "First"와 "Name.

    내부 이름을 변경해도 JSON에서 데이터를 가져오는 데에는 영향을 미치지 않습니다 . JSON 데이터는 여전히 Realm Java 클래스에 정의된 이름 뒤에 와야 합니다.

    Mashi, GSON 또는 잭슨과 같은 표준 라이브러리를 사용하여 JSON을 구문 분석할 때 이러한 라이브러리는 JSON에서 Java로의 변환을 정의하는 반면 내부 Realm 이름 설정은 Java에서 Realm 파일로의 변환을 정의한다는 점을 명심해야 합니다.

    즉, 이러한 라이브러리를 사용하여 JSON에서 Realm으로 데이터를 가져오려면 JSON 구문 분석기 라이브러리와 Realm 모두에서 주석을 제공해야 합니다.

    Mashi를 사용하면 다음과 같이 표시됩니다.

     
     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
     }
     
     
    다음도 참조하세요.
    RealmModule, RealmClass, RealmField
    • 열거형 상수 세부 정보

      • NO_POLICY

        public static final RealmNamingPolicy NO_POLICY
        정책이 적용되지 않습니다. 이 정책은 상위 요소에 설정된 정책을 재정의하지 않으며, 예를 들어 RealmClass.fieldNamingPolicy() 에 설정된 경우 모듈 정책은 필드 이름에 계속 적용됩니다.

        두 모듈이 정책에 대해 동의하지 않고 그 중 하나가 NO_POLICY 인 경우 다른 모듈은 오류 없이 선택됩니다.

        이 정책이 기본값입니다.

      • IDENTITY

        public static final RealmNamingPolicy IDENTITY
        Java 모델 클래스의 이름은 내부적으로 있는 그대로 사용됩니다.
      • CANEL_CASE

        public static final RealmNamingPolicy CAMEL_CASE
        Java 모델 클래스의 이름은 카멜 표기법으로 변환됩니다. 이는 Java, Kotlin, Swift, JavaScript의 표준 명명 스키마입니다.

        예: "firstName", "FirstName", "mFirstName", "FIRST_NAME", "First$Name"은 모두 "firstName"이 됩니다.

      • PASCAL_CASE

        public static final RealmNamingPolicy PASCAL_CASE
        Java 모델 클래스의 이름은 PascalCase로 변환됩니다. 즉, 모든 단어는 모든 단어의 첫 글자를 대문자로 합치며 결합됩니다. 이는 .NET의 기본 명명 체계입니다.

        예: "firstName", "FirstName", "mFirstName", "FIRST_NAME", "First$Name"은 모두 "FirstName"이 됩니다.

      • OWER_CASE_WiTH_UNDERSCORES

        public static final RealmNamingPolicy LOWER_CASE_WITH_UNDERSCORES
        Java 모델 클래스의 이름은 각 단어를 _ 으로 구분하여 소문자로 변환됩니다. 이것이 C++의 기본 명명 체계입니다.

        예: "firstName", "FirstName", "mFirstName", "FIRST_NAME", "First$Name"은 모두 "first_name"이(가) 됩니다.

    • 메서드 세부 정보

      • values

        public static RealmNamingPolicy[] values()
        이 열거형 유형의 상수를 포함하는 배열을 선언된 순서대로 반환합니다. 이 메서드는 다음과 같이 상수를 반복하는 데 사용할 수 있습니다:
        for (RealmNamingPolicy c : RealmNamingPolicy.values())
            System.out.println(c);
        
        반환합니다:
        이 열거형의 상수를 포함하는 배열(선언된 순서대로)
      • valueOf

        public static RealmNamingPolicy valueOf​(String name)
        지정된 이름을 가진 이 유형의 열거형 상수를 반환합니다. 문자열은 이 유형에서 열거형 상수를 선언하는 데 사용된 식별자와 정확히 일치해야 합니다. (불필요한 공백 문자는 허용되지 않습니다.)
        매개변수:
        name - 반환되는 열거형 상수의 이름입니다.
        반환합니다:
        지정된 이름을 가진 열거형 상수
        예외 처리:
        IllegalArgumentException - 이 열거형 유형에 지정된 이름의 상수가 없는 경우
        NullPointerException - 인수가 null인 경우