注釈 タイプ 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
-
-
-
クラス
クラス<?>[] クラス
このモジュールの一部となる RealmObject を拡張するクラスを指定します。 このプロジェクト内のクラスのみを含めることができます。 他のライブラリのクラスは、独自のモジュールを使用して公開する必要があります。allClasses = true
とclasses()
の両方を設定すると、注釈プロセッサは例外をスローします。- デフォルト:
- {}
-
-
-
ClassNamePolicy
RealmNamePolicy ClassNamePolicy
このモジュールのすべてのクラス部分に適用された命名ポリシー。 デフォルト ポリシーはRealmNamingPolicy.NO_POLICY
です。 クラス内のすべてのフィールドの命名ポリシーを定義するには、fieldNamingPolicy()
を使用します。RealmClass
アノテーションを使用して、各クラスの モジュールで指定された命名ポリシーを上書きできます。クラスが複数のモジュールの一部である場合は、両方のモジュールに同じ命名ポリシーを適用する必要があります。そうでない場合は、エラーがスローされます。
- デフォルト:
- io.realm.annotations.RealmNameingPolicy.NO_ポリシー
-
-
-
fieldNamePolicy
RealmNamePolicy fieldNamePolicy
このモジュールのすべてのクラスのすべてのフィールド名に適用された命名ポリシー。 デフォルト ポリシーはRealmNamingPolicy.NO_POLICY
です。 クラス名の命名ポリシーを定義するには、classNamingPolicy()
を使用します。この命名ポリシーは、
RealmClass.fieldNamingPolicy()
またはRealmField.name()
を使用して上書きできます。- デフォルト:
- io.realm.annotations.RealmNameingPolicy.NO_ポリシー
-
-