注釈 タイプ RealmModle
io.realm.annotations
実装されたインターフェース:
デフォルトでは、Realm は RealmObject を拡張するすべてのクラスをプロジェクトに保存できます。 ただし、Realm を クラスのサブセットのみを含むように制限する場合や、ライブラリ プロジェクトとアプリ プロジェクト間でそれらを共有する場合は、RealmModle を使用する必要があります。RealmModle は、次と組み合わせることができる RealmObject を拡張するクラスのコレクションです。他の Realm のスキーマを作成するには、 を使用します。 これにより、これらの 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()
を使用してライブラリのプロジェクト クラスをスキーマに追加できるオプションが追加されました。
任意要素の概要
修飾子と型 | 任意要素と説明 |
---|---|
パブリックブール値 | すべての Realm クラスをモジュールに手動で追加する代わりに、このブール値を true に設定して、このプロジェクトにすべての Realm クラスを自動的に含めます。 |
public RealmNameingPolicy | このモジュールのすべてのクラス部分に適用された命名ポリシー。 |
public クラス | このモジュールの一部となる RealmObject を拡張するクラスを指定します。 |
public RealmNameingPolicy | このモジュールのすべてのクラスのすべてのフィールド名に適用された命名ポリシー。 |
パブリックブール値 | これを true に設定すると、このモジュールはライブラリ モジュールとしてマークされます。 |
要素の詳細
allClasses |
---|
すべての Realm クラスをモジュールに手動で追加する代わりに、このブール値を true に設定して、このプロジェクトにすべての Realm クラスを自動的に含めます。 これには、独自のモジュールを使用して公開する必要がある他のライブラリのクラスは含まれません。 デフォルト:
|
ClassNamePolicy |
---|
このモジュールのすべてのクラス部分に適用された命名ポリシー。 デフォルトのポリシーはRealmNamePolicy.NO_ポリシー です。 クラス内のすべてのフィールドの命名ポリシーを定義するには、 fieldNamePolicy()を使用します。 RealmClassアノテーションを使用して、各クラスの モジュールで指定された命名ポリシーを上書きできます。 クラスが複数のモジュールの一部である場合は、両方のモジュールに同じ命名ポリシーを適用する必要があります。そうでない場合は、エラーがスローされます。 デフォルト:
|
クラス |
---|
このモジュールの一部となる RealmObject を拡張するクラスを指定します。 このプロジェクト内のクラスのみを含めることができます。 他のライブラリのクラスは、独自のモジュールを使用して公開する必要があります。 デフォルト:
|
fieldNamePolicy |
---|
このモジュールのすべてのクラスのすべてのフィールド名に適用された命名ポリシー。 デフォルトのポリシーはRealmNamePolicy.NO_ポリシー です。 クラス名の命名ポリシーを定義するには、 ClassNamePolicy()を使用します。 この命名ポリシーは、 RealmClass.fieldNamePolicy()またはRealmField.name( ) を使用して上書きできます。 デフォルト:
|
ライブラリ |
---|
これを true に設定すると、このモジュールはライブラリ モジュールとしてマークされます。 これにより、Realm はすべてのクラスを含む デフォルト:
|