パッケージ io.realm.annotations

注釈 タイプ RealmModle


  • @Retention(RUNTIME)
    @Target(TYPE)
    @Inherited
    public @interface RealmModule
    デフォルトでは、Realm は RealmObject を拡張するすべてのクラスをプロジェクトに保存できます。 ただし、Realm にクラスのサブセットのみを含めるように制限する場合や、ライブラリ プロジェクトとアプリ プロジェクト間でそれらを共有する場合は、RealmModle を使用する必要があります。

    RealmModle は、Realm のスキーマを作成するために他の RealmModles と組み合わせて使用できる RealmObject を拡張するクラスのコレクションです。 これにより、これらの Realm のバージョン管理と移行を制御しやすくなります。

    RealmModle は、ライブラリ モジュールまたはアプリ モジュールのいずれかになります。 この区別は、 library = trueを設定することで行われます。 library = trueを設定することは、通常、ライブラリの作成者にのみ関連します。 詳細については、以下を参照してください。

    現在のところ、1 つのファイルに複数の RealmModle 宣言を含めることはできません。 複数の RealmModle がある場合は、モジュールごとに個別の Java ファイルを使用する必要があります。

    RealmModles とライブラリ

    Realm のデフォルトの動作は、プロジェクト内の RealmObject を拡張するすべてのクラスを含むDefaultRealmModuleという RealmModle を自動的に作成することです。 このモジュールは、Realm によって自動的に認識されます。

    この動作は、ライブラリ プロジェクトと Realm の両方を使用するアプリ プロジェクトを組み合わせる場合に問題があります。 これは、ライブラリ プロジェクトとアプリ プロジェクトの両方に対してDefaultRealmModuleが作成されるため、重複クラス定義エラーでプロジェクトが失敗するためです。

    ライブラリの作成者は、 library = trueが設定されている明示的なモジュールを使用することで、この競合を回避する必要があります。 これにより、ライブラリ プロジェクトの DefaultRealmModle の生成が無効になり、Realm も使用するアプリプロジェクトにライブラリを含めることができます。 つまり、Realm を内部的に使用するライブラリ プロジェクトでは、 RealmConfiguration.modules()を使用して特定のモジュールを指定する必要があります。

    アプリ開発者は暗黙的にDefaultRealmModuleを使用するため、モジュールを指定する必要はありませんが、 RealmConfiguration.addModule()を使用してライブラリのプロジェクト クラスをスキーマに追加できるオプションが追加されました。

    以下も参照してください。
    モジュールを使用したプロジェクトの例
    • 任意要素の概要

      任意要素 
      修飾子と型 任意要素 説明
      boolean allClasses
      すべての Realm クラスをモジュールに手動で追加する代わりに、このブール値を true に設定して、このプロジェクトにすべての Realm クラスを自動的に含めます。
      Class<?>[] classes
      このモジュールの一部となる RealmObject を拡張するクラスを指定します。
      RealmNamingPolicy classNamingPolicy
      このモジュールのすべてのクラス部分に適用された命名ポリシー。
      RealmNamingPolicy fieldNamingPolicy
      このモジュールのすべてのクラスのすべてのフィールド名に適用された命名ポリシー。
      boolean library
      これを true に設定すると、このモジュールはライブラリ モジュールとしてマークされます。
    • 要素の詳細

      • ライブラリ

        ブール値ライブラリ
        これを true に設定すると、このモジュールはライブラリ モジュールとしてマークされます。 これにより、Realm はすべてのクラスを含むDefaultRealmModuleを生成できなくなります。 これはライブラリに必要なため、アプリ コード内で実行される Realm を利用することはありませんが、Realm を使用するすべてのライブラリは明示的に モジュールを使用する必要があり、デフォルトのモジュールが存在することに依存できません。 同じプロジェクトでライブラリ モジュールと通常のモジュールを作成することは許可されていないため、注釈プロセッサは例外をスローします。
        デフォルト:
        false
      • allClasses

        ブール値 allClasses
        すべての Realm クラスをモジュールに手動で追加する代わりに、このブール値を true に設定して、このプロジェクトにすべての Realm クラスを自動的に含めます。 これには、独自のモジュールを使用して公開する必要がある他のライブラリのクラスは含まれません。 allClasses = trueclasses()の両方を設定すると、注釈プロセッサは例外をスローします。
        デフォルト:
        false
      • クラス

        クラス<?>[] クラス
        このモジュールの一部となる RealmObject を拡張するクラスを指定します。 このプロジェクト内のクラスのみを含めることができます。 他のライブラリのクラスは、独自のモジュールを使用して公開する必要があります。 allClasses = trueclasses()の両方を設定すると、注釈プロセッサは例外をスローします。
        デフォルト:
        {}
      • ClassNamePolicy

        RealmNamePolicy ClassNamePolicy
        このモジュールのすべてのクラス部分に適用された命名ポリシー。 デフォルト ポリシーはRealmNamingPolicy.NO_POLICYです。 クラス内のすべてのフィールドの命名ポリシーを定義するには、 fieldNamingPolicy()を使用します。

        RealmClassアノテーションを使用して、各クラスの モジュールで指定された命名ポリシーを上書きできます。

        クラスが複数のモジュールの一部である場合は、両方のモジュールに同じ命名ポリシーを適用する必要があります。そうでない場合は、エラーがスローされます。

        以下も参照してください。
        for more information about what setting this policy means.
        デフォルト:
        io.realm.annotations.RealmNameingPolicy.NO_ポリシー