Annotation Type RealmModule


  • @Retention(RUNTIME)
    @Target(TYPE)
    @Inherited
    public @interface RealmModule
    By default a Realm can store all classes extending RealmObject in a project. However, if you want to restrict a Realm to only contain a subset of classes or want to share them between a library project and an app project, you must use a RealmModule.

    A RealmModule is a collection of classes extending RealmObject that can be combined with other RealmModules to create the schema for a Realm. This makes it easier to control versioning and migration of those Realms.

    A RealmModule can either be a library module or an app module. The distinction is made by setting library = true. Setting library = true is normally only relevant for library authors. See below for further details.

    Currently, it is not possible to have multiple RealmModule declarations in a single file. If you have more than one RealmModule, you will have to use separate Java files for each module.

    RealmModules and libraries

    Realms default behavior is to automatically create a RealmModule called DefaultRealmModule which contains all classes extending RealmObject in a project. This module is automatically known by Realm.

    This behavior is problematic when combining a library project and an app project that both uses Realm. This is because the DefaultRealmModule will be created for both the library project and the app project, which will cause the project to fail with duplicate class definition errors.

    Library authors are responsible for avoiding this conflict by using explicit modules where library = true is set. This disables the generation of the DefaultRealmModule for the library project and allows the library to be included in the app project that also uses Realm. This means that library projects that uses Realm internally are required to specify a specific module using RealmConfiguration.modules().

    App developers are not required to specify any modules, as they implicitly use the DefaultRealmModule, but they now has the option of adding the library project classes to their schema using RealmConfiguration.addModule().

    See Also:
    Example of a project using modules
    • Optional Element Summary

      Optional Elements 
      Modifier and Type Optional Element Description
      boolean allClasses
      Instead of adding all Realm classes manually to a module, set this boolean to true to automatically include all Realm classes in this project.
      Class<?>[] classes
      Specifies the classes extending RealmObject that should be part of this module.
      RealmNamingPolicy classNamingPolicy
      The naming policy applied to all classes part of this module.
      RealmNamingPolicy fieldNamingPolicy
      The naming policy applied to all field names in all classes part of this module.
      boolean library
      Setting this to true will mark this module as a library module.
    • Element Detail

      • library

        boolean library
        Setting this to true will mark this module as a library module. This will prevent Realm from generating the DefaultRealmModule containing all classes. This is required by libraries so they do not interfere with Realms running in app code, but it also means that all libraries using Realm must explicitly use a module and cannot rely on the default module being present. Creating library modules and normal modules in the same project is not allowed and will result in the annotation processor throwing an exception.
        Default:
        false
      • allClasses

        boolean allClasses
        Instead of adding all Realm classes manually to a module, set this boolean to true to automatically include all Realm classes in this project. This does not include classes from other libraries which must be exposed using their own module. Setting both allClasses = true and classes() will result in the annotation processor throwing an exception.
        Default:
        false
      • classes

        Class<?>[] classes
        Specifies the classes extending RealmObject that should be part of this module. Only classes in this project can be included. Classes from other libraries must be exposed using their own module. Setting both allClasses = true and classes() will result in the annotation processor throwing an exception.
        Default:
        {}