安装包 io.realm

类 RealmObjectSchema


  • public abstract class RealmObjectSchema
    extends Object
    用于与给定 RealmObject 类的模式进行交互的类。 这样就可以检查、添加、删除或更改给定类的字段。

    如果此RealmObjectSchema是从不可变的RealmSchema中检索的,则此RealmObjectSchema也将是不可变的。

    另请参阅:
    RealmMigration
    • 方法详细信息

      • getClassName

        public String getClassName()
        返回此模式表示的 RealmObject 类的名称。

        • 使用普通Realm时,此名称与RealmObject类相同。
        • 使用DynamicRealm时,这是在所有需要类名的 API 方法中使用的名称。
        返回:
        此模式表示的 RealmObject 类的名称。
        抛出异常:
        IllegalStateException - 如果此模式定义不再是 Realm 的一部分。
      • addRealmListField

        public abstract RealmObjectSchema addRealmListField​(String fieldName,
                                                            Class<?> primitiveType)
        添加引用具有原始值的RealmList的新字段。请参阅RealmObject以了解支持的类型列表。

        元素的可空性是通过使用正确的类来定义的,例如, Integer.class而不是int.class 。 或者可以使用setRequired(String, boolean)

        示例:

         
         // Defines the list of Strings as being non null.
         RealmObjectSchema schema = schema.create("Person")
             .addRealmListField("children", String.class)
             .setRequired("children", true)
         
         
        如果列表包含对其他 Realm 类的引用,请改用addRealmListField(String, RealmObjectSchema)
        参数:
        fieldName - 要添加的字段的名称。
        primitiveType - 数组中简单类型的元素。
        返回:
        更新后的模式。
        抛出异常:
        IllegalArgumentException - 如果字段名称非法,则表明已存在具有该名称的字段,或者不支持该元素类型。
        UnsupportedOperationException - 如果此RealmObjectSchema不可变。
      • addRealmDictionaryField

        public abstract RealmObjectSchema addRealmDictionaryField​(String fieldName,
                                                                  Class<?> primitiveType)
        添加引用具有原始值的RealmDictionary的新字段。请参阅RealmObject以了解支持的类型列表。

        元素的可空性是通过使用正确的类来定义的,例如, Integer.class而不是int.class 。 或者可以使用setRequired(String, boolean)

        示例:

         
         // Defines the dictionary of Strings as being non null.
         RealmObjectSchema schema = schema.create("Person")
             .addRealmDictionaryField("parentAndChild", String.class)
             .setRequired("parentAndChild", true)
         
         
        如果列表包含对其他 Realm 类的引用,请改用addRealmDictionaryField(String, RealmObjectSchema)
        参数:
        fieldName - 要添加的字段的名称。
        primitiveType - 数组中简单类型的元素。
        返回:
        更新后的模式。
        抛出异常:
        IllegalArgumentException - 如果字段名称非法,则表明已存在具有该名称的字段,或者不支持该元素类型。
        UnsupportedOperationException - 如果此RealmObjectSchema不可变。
      • addRealmSetField

        public abstract RealmObjectSchema addRealmSetField​(String fieldName,
                                                           Class<?> primitiveType)
        添加引用具有原始值的RealmSet的新字段。请参阅RealmObject以了解支持的类型列表。

        元素的可空性是通过使用正确的类来定义的,例如, Integer.class而不是int.class 。 或者可以使用setRequired(String, boolean)

        示例:

         
         // Defines the set of Strings as being non null.
         RealmObjectSchema schema = schema.create("Person")
             .addRealmSetField("children", String.class)
             .setRequired("children", true)
         
         
        如果列表包含对其他 Realm 类的引用,请改用addRealmSetField(String, RealmObjectSchema)
        参数:
        fieldName - 要添加的字段的名称。
        primitiveType - 数组中简单类型的元素。
        返回:
        更新后的模式。
        抛出异常:
        IllegalArgumentException - 如果字段名称非法,则表明已存在具有该名称的字段,或者不支持该元素类型。
        UnsupportedOperationException - 如果此RealmObjectSchema不可变。
      • hasField

        public boolean hasField​( String fieldName)
        测试类中是否具有使用给定名称定义的字段。
        参数:
        fieldName - 要测试的字段名称。
        返回:
        true 如果该字段存在,否则为false
      • hasIndex

        public boolean hasIndex​( String fieldName)
        检查给定字段是否已定义索引。
        参数:
        fieldName - 要检查的现有字段名称。
        返回:
        true 如果字段已建立索引,则返回false
        抛出异常:
        IllegalArgumentException - 如果字段名称不存在。
        另请参阅:
        Index
      • setRequired

        public abstract RealmObjectSchema setRequired​(String fieldName,
                                                      boolean required)
        将字段设置为必填字段,即不允许保存null值。 这相当于在装箱类型及其原始变体之间切换,例如从Integer切换到int

        如果指定字段的类型是值列表(而不是RealmObject ,则指定的可空性仅影响其元素,而不影响字段本身。 值列表本身始终不可为空。

        参数:
        fieldName - 类中的字段名称。
        required - 如果字段为必填字段,则为true ,否则为false
        返回:
        更新后的模式。
        抛出异常:
        IllegalArgumentException - 如果字段名称不存在,不能有Required注解,或者字段已设置为必填字段。
        UnsupportedOperationException - 如果此RealmObjectSchema不可变。
        另请参阅:
        Required
      • setNullable

        public abstract RealmObjectSchema setNullable​(String fieldName,
                                                      boolean nullable)
        将字段设置为可为 null,即它应该能够保存null值。 这相当于在基元类型及其盒装变体之间切换,例如从int切换到Integer

        如果指定字段的类型是值列表(而不是RealmObject ,则指定的可空性仅影响其元素,而不影响字段本身。 值列表本身始终不可为空。

        参数:
        fieldName - 类中的字段名称。
        nullable - 如果字段应可为空,则为true ,否则为false
        返回:
        更新后的模式。
        抛出异常:
        IllegalArgumentException - 如果字段名称不存在,或不能设置为可为空。
        UnsupportedOperationException - 如果此RealmObjectSchema不可变。
      • isRequired

        public boolean isRequired​( String fieldName)
        检查给定字段是否为必填字段,即不允许包含null值。
        参数:
        fieldName - 要检查的字段。
        返回:
        true 如果需要,否则为false
        抛出异常:
        IllegalArgumentException - 如果字段名称不存在。
        另请参阅:
        setRequired(String, boolean)
      • isNullable

        public boolean isNullable​( String fieldName)
        检查给定字段是否可为 null,即是否允许该字段包含null值。
        参数:
        fieldName - 要检查的字段。
        返回:
        true 如果需要,否则为false
        抛出异常:
        IllegalArgumentException - 如果字段名称不存在。
        另请参阅:
        setNullable(String, boolean)
      • isPrimaryKey

        public boolean isPrimaryKey​( String fieldName)
        检查给定字段是否为主键字段。
        参数:
        fieldName - 要检查的字段。
        返回:
        true 如果是主键字段,则为false
        抛出异常:
        IllegalArgumentException - 如果字段名称不存在。
        另请参阅:
        addPrimaryKey(String)
      • hasPrimaryKey

        public boolean hasPrimaryKey()
        检查该类是否定义了主键。
        返回:
        true 如果已定义主键,则为false
        另请参阅:
        PrimaryKey
      • getPrimaryKey

        public String getPrimaryKey()
        返回主键字段的名称。
        返回:
        主键字段的名称。
        抛出异常:
        IllegalStateException - 如果该类没有定义主键。
      • getFieldNames

        public Set<String> getFieldNames()
        返回此类中的所有字段。
        返回:
        该类中所有字段的列表。
      • getFieldType

        公共RealmFieldType getFieldType​( String fieldName)
        返回底层存储引擎用于表示该字段的类型。
        参数:
        fieldName — 目标字段的名称。
        返回:
        Realm 用来表示该字段的基础类型。
      • isEmbedded

        public boolean isEmbedded()
        如果此类对象被视为“嵌入式”,则返回true 。有关更多详细信息,请参阅RealmClass.embedded()
        返回:
        true 如果嵌入了此类对象。 如果没有,请false
      • setEmbedded

        public void setEmbedded​(boolean embedded)
        将类转换为嵌入式或非嵌入式。

        仅当满足以下不变量时,才能将类标记为嵌入式:

        • 该类不允许定义主键。
        • 此类型的所有现有对象必须有一个且只有一个父对象指向它。 如果 0 个或超过 1 个对象引用了即将标记为嵌入式的对象,则会抛出IllegalStateException
        抛出异常:
        IllegalStateException - 如果类由于破坏了某些嵌入式对象不变量而无法转换。
        另请参阅:
        RealmClass.embedded()