パッケージ io.realm.annotations

RealmNameingPolicy を列挙する

  • すべての実装インターフェース:
    Serializable, Comparable<RealmNamingPolicy>

    public enum RealmNamingPolicy
    extends Enum<RealmNamingPolicy>
    この列挙型は、クラス名とフィールド名を Java で使用されるものから Realm ファイルの内部で使用される名前にマッピングする可能な方法を定義します。

    これが役立つ例を示します。

    • 同じシンプル名で、パッケージが異なる 2 つのモデル クラスをサポートします。
    • 命名規則が異なるため、複数のプラットフォームにまたがるスキーマの操作を容易にするため。
    • 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" が「First」と「Name」になります。
    3. 複数の大文字から小文字の に切り替えるたび。 最後の大文字は、次の単語の一部であると想定されます。 これは、 Character.isUpperCase(int)Character.isLowerCase(int)を使用することで識別されます。 例としては、"FIRSTName" で、これは "FIRST" と "Name" になります。
    4. イメージの一部の文字は大文字でも小文字でもないため、現在の単語の一部になります。 例としては、"myReader" と "MyReader" が挙げられます。これらは両方とも 1 つの単語として扱われます。
    5. ハンガリー表記、つまり小文字の "m" で始まり、その後に大文字の文字が続く変数名は切り捨てられ、単語の一部とは見なされません。 例としては、"mFirstName" と "mFIRSTName" で、これは "First" と "Name" になります。

    内部名を変更しても、JSON からのデータのインポートには影響しないことに注意してください。 JSON データは、Realm Java クラスで定義されている名前に従う必要があります。

    Moshi、GSON、Jackson などの標準ライブラリを使用して JSON を解析する場合は、これらのライブラリが JSON から Java への変換を定義し、内部 Realm 名を設定すると、Java から Realm ファイルへの変換が定義されることを覚えておいてください。

    つまり、これらのライブラリを使用して JSON から Realm にデータをインポートする場合は、JSON パーサー ライブラリと Realm の両方から注釈を提供する必要があります。

    Moshi を使用すると、次のようになります。

     
     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_ポリシー

        public static final RealmNamingPolicy NO_POLICY
        ポリシーは適用されません。 このポリシーは、親要素に設定されたポリシーを上書きすることはありません。たとえば、 RealmClass.fieldNamingPolicy()に設定されている場合でも、モジュール ポリシーはフィールド名に引き続き適用されます。

        2 つのモジュールがポリシーで相違し、いずれか 1 つがNO_POLICYである場合、エラーはスローされることなくもう 1 つが選択されます。

        このポリシーはデフォルトです。

      • IDity

        public static final RealmNamingPolicy IDENTITY
        Java モデル クラス内の 名前は、内部的に として使用されます。
      • RAMEL_CASE

        public static final RealmNamingPolicy CAMEL_CASE
        Java モデル クラスの名前はキャメルケースに変換されます。つまり、すべての単語が、最初の単語の最初の文字は小文字になり、後続のすべての単語の最初の文字は大文字と小文字で結合されます。 これは、Java、 Kotlin、Swift、JavaScript の標準的な命名スキーマです。

        例: "firstName"、"FirstName"、"mFirstName"、"FIRST_NAME"、"First$Name" はすべて "firstName" になります。

      • PAGER_CASE

        public static final RealmNamingPolicy PASCAL_CASE
        Java モデル クラスの名前はパスカルケースに変換されます。つまり、すべての単語が大文字の最初の文字で結合されます。 これは、.NET のデフォルトの命名スキームです。

        例: "firstName"、"FirstName"、"mFirstName"、"FIRST_NAME"、"First$Name" はすべて "FirstName" になります。

      • Lower_CASE_With_ENDERS

        public static final RealmNamingPolicy LOWER_CASE_WITH_UNDERSCORES
        Java モデル クラス内の は、各単語が_で区切られた小文字に変換されます。 これは、C++ のデフォルトの命名スキームです。

        例: "firstName"、"FirstName"、"mFirstName"、"FIRST_NAME"、"First$Name" はすべて "first_name" になります。

    • メソッドの詳細

      • values

        public static RealmNamingPolicy[] values()
        この列挙型の定数を含む配列を、宣言された順序で返します。 このメソッドは、次のように 定数を反復処理するために使用できます。
        (RealmNamePolicy c : RealmNamePolicy.values())   System.out.println(c)
        
        次の値を返します。
        この列挙型の定数を宣言された順序で含む配列
      • valueOf

        public static RealmNamingPolicy valueOf​(String name)
        指定された名前を持つこの型の列挙定数を返します。 string は、この型で列挙定数を宣言するために使用される識別子と完全に一致する必要があります。 (余計な空白文字は許可されません。)
        パラメーター:
        name - 返される列挙定数の名前。
        次の値を返します。
        指定された名前の列挙 定数
        次の例外がスローされます。
        IllegalArgumentException - この列挙型に指定された名前の定数がない場合
        NullPointerException - 引数が null の場合