类 RealmObjectSchema
- java.lang.Object
-
- io.realm.RealmObjectSchema
-
public abstract class RealmObjectSchema extends Object
用于与给定 RealmObject 类的模式进行交互的类。 这样就可以检查、添加、删除或更改给定类的字段。如果此
RealmObjectSchema
是从不可变的RealmSchema
中检索的,则此RealmObjectSchema
也将是不可变的。- 另请参阅:
RealmMigration
-
-
嵌套类摘要
嵌套类 修饰符和类型 类 说明 static interface
RealmObjectSchema.Function
函数接口,用于遍历当前类的所有对象并对每个对象应用函数。
-
方法摘要
所有方法 实例方法 抽象方法 具体方法 修饰符和类型 方法 说明 abstract RealmObjectSchema
addField(String fieldName, Class<?> fieldType, FieldAttribute... attributes)
向 RealmObject 类添加一个新的简单字段。abstract RealmObjectSchema
addIndex(String fieldName)
为给定字段添加索引。abstract RealmObjectSchema
addPrimaryKey(String fieldName)
向给定字段添加主键。abstract RealmObjectSchema
addRealmDictionaryField(String fieldName, RealmObjectSchema objectSchema)
添加一个新的字段,其中包含一个RealmDictionary
,其中引用了其他Realm模型类。abstract RealmObjectSchema
addRealmDictionaryField(String fieldName, Class<?> primitiveType)
添加引用具有原始值的RealmDictionary
的新字段。abstract RealmObjectSchema
addRealmListField(String fieldName, RealmObjectSchema objectSchema)
添加一个新的字段,其中包含一个RealmList
,其中引用了其他Realm模型类。abstract RealmObjectSchema
addRealmListField(String fieldName, Class<?> primitiveType)
添加引用具有原始值的RealmList
的新字段。abstract RealmObjectSchema
addRealmObjectField(String fieldName, RealmObjectSchema objectSchema)
添加引用另一个RealmObject
的新字段。abstract RealmObjectSchema
addRealmSetField(String fieldName, RealmObjectSchema objectSchema)
添加一个新的字段,其中包含一个RealmSet
,其中引用了其他Realm模型类。abstract RealmObjectSchema
addRealmSetField(String fieldName, Class<?> primitiveType)
添加引用具有原始值的RealmSet
的新字段。String
getClassName()
返回此模式表示的 RealmObject 类的名称。Set<String>
getFieldNames()
返回此类中的所有字段。RealmFieldType
getFieldType(String fieldName)
返回底层存储引擎用于表示该字段的类型。String
getPrimaryKey()
返回主键字段的名称。boolean
hasField(String fieldName)
测试类中是否具有使用给定名称定义的字段。boolean
hasIndex(String fieldName)
检查给定字段是否已定义索引。boolean
hasPrimaryKey()
检查该类是否定义了主键。boolean
isEmbedded()
如果此类对象被视为“嵌入式”,则返回true
。boolean
isNullable(String fieldName)
检查给定字段是否可为 null,即是否允许该字段包含null
值。boolean
isPrimaryKey(String fieldName)
检查给定字段是否为主键字段。boolean
isRequired(String fieldName)
检查给定字段是否为必填字段,即不允许包含null
值。abstract RealmObjectSchema
removeField(String fieldName)
从类中删除字段。abstract RealmObjectSchema
removeIndex(String fieldName)
从给定字段中删除索引。abstract RealmObjectSchema
removePrimaryKey()
从此类中删除主键。abstract RealmObjectSchema
renameField(String currentFieldName, String newFieldName)
将字段从一个名称重命名为另一个名称。abstract RealmObjectSchema
setClassName(String className)
为此 RealmObject 类设置新名称。void
setEmbedded(boolean embedded)
将类转换为嵌入式或非嵌入式。abstract RealmObjectSchema
setNullable(String fieldName, boolean nullable)
将字段设置为可为 null,即它应该能够保存null
值。abstract RealmObjectSchema
setRequired(String fieldName, boolean required)
将字段设置为必填字段,即不允许保存null
值。abstract RealmObjectSchema
transform(RealmObjectSchema.Function function)
对当前类的每个 RealmObject 实例运行转换函数。
-
-
-
方法详细信息
-
getClassName
public String getClassName()
返回此模式表示的 RealmObject 类的名称。- 使用普通
Realm
时,此名称与RealmObject
类相同。 - 使用
DynamicRealm
时,这是在所有需要类名的 API 方法中使用的名称。
- 返回:
- 此模式表示的 RealmObject 类的名称。
- 抛出异常:
IllegalStateException
- 如果此模式定义不再是 Realm 的一部分。
- 使用普通
-
setClassName
public abstract RealmObjectSchema setClassName(String className)
为此 RealmObject 类设置新名称。 这相当于对其进行重命名。- 参数:
className
- 此类的新名称。- 抛出异常:
IllegalArgumentException
- 如果 className 为null
或空字符串,或其长度超过 56 个字符。UnsupportedOperationException
- 如果此RealmObjectSchema
不可变或来自同步的 Realm。- 另请参阅:
RealmSchema.rename(String, String)
-
addField
public abstract RealmObjectSchema addField(String fieldName, Class<?> fieldType, FieldAttribute... attributes)
向 RealmObject 类添加一个新的简单字段。 该类型必须是 Realm 支持的类型。 请参阅RealmObject
以了解支持的类型列表。 如果字段应允许null
值,请使用装箱类型,例如,使用Integer.class
代替int.class
。要添加引用其他 RealmObject 或 RealmList 的字段,请改用
addRealmObjectField(String, RealmObjectSchema)
或addRealmListField(String, RealmObjectSchema)
。- 参数:
fieldName
- 要添加的字段的名称。fieldType
— 要添加的字段类型。 请参阅RealmObject
以获取完整列表。attributes
— 此字段的属性集。- 返回:
- 更新后的模式。
- 抛出异常:
IllegalArgumentException
- 如果不支持该类型,则字段名称非法或已存在具有该名称的字段。UnsupportedOperationException
- 如果此RealmObjectSchema
不可变,或者将具有FieldAttribute.PRIMARY_KEY
属性的字段添加到已同步 Realm 的模式中。
-
addRealmObjectField
public abstract RealmObjectSchema addRealmObjectField(String fieldName, RealmObjectSchema objectSchema)
添加引用另一个RealmObject
的新字段。- 参数:
fieldName
- 要添加的字段的名称。objectSchema
— 所引用的 Realm 类型的模式。- 返回:
- 更新后的模式。
- 抛出异常:
IllegalArgumentException
- 如果字段名称非法或具有该名称的字段已存在。UnsupportedOperationException
- 如果此RealmObjectSchema
不可变。
-
addRealmListField
public abstract RealmObjectSchema addRealmListField(String fieldName, RealmObjectSchema objectSchema)
添加一个新的字段,其中包含一个RealmList
,其中引用了其他Realm模型类。如果列表包含基元类型,请改用
addRealmListField(String, Class)
。- 参数:
fieldName
- 要添加的字段的名称。objectSchema
— 所引用的 Realm 类型的模式。- 返回:
- 更新后的模式。
- 抛出异常:
IllegalArgumentException
- 如果字段名称非法或已存在具有该名称的字段。UnsupportedOperationException
- 如果此RealmObjectSchema
不可变。
-
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)
addRealmListField(String, RealmObjectSchema)
。- 参数:
fieldName
- 要添加的字段的名称。primitiveType
- 数组中简单类型的元素。- 返回:
- 更新后的模式。
- 抛出异常:
IllegalArgumentException
- 如果字段名称非法,则表明已存在具有该名称的字段,或者不支持该元素类型。UnsupportedOperationException
- 如果此RealmObjectSchema
不可变。
-
addRealmDictionaryField
public abstract RealmObjectSchema addRealmDictionaryField(String fieldName, RealmObjectSchema objectSchema)
添加一个新的字段,其中包含一个RealmDictionary
,其中引用了其他Realm模型类。如果字典包含基元类型,请改用
addRealmDictionaryField(String, Class)
。- 参数:
fieldName
- 要添加的字段的名称。objectSchema
— 所引用的 Realm 类型的模式。- 返回:
- 更新后的模式。
- 抛出异常:
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)
addRealmDictionaryField(String, RealmObjectSchema)
。- 参数:
fieldName
- 要添加的字段的名称。primitiveType
- 数组中简单类型的元素。- 返回:
- 更新后的模式。
- 抛出异常:
IllegalArgumentException
- 如果字段名称非法,则表明已存在具有该名称的字段,或者不支持该元素类型。UnsupportedOperationException
- 如果此RealmObjectSchema
不可变。
-
addRealmSetField
public abstract RealmObjectSchema addRealmSetField(String fieldName, RealmObjectSchema objectSchema)
添加一个新的字段,其中包含一个RealmSet
,其中引用了其他Realm模型类。如果该集合包含基元类型,请改用
addRealmSetField(String, Class)
。- 参数:
fieldName
- 要添加的字段的名称。objectSchema
— 所引用的 Realm 类型的模式。- 返回:
- 更新后的模式。
- 抛出异常:
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)
addRealmSetField(String, RealmObjectSchema)
。- 参数:
fieldName
- 要添加的字段的名称。primitiveType
- 数组中简单类型的元素。- 返回:
- 更新后的模式。
- 抛出异常:
IllegalArgumentException
- 如果字段名称非法,则表明已存在具有该名称的字段,或者不支持该元素类型。UnsupportedOperationException
- 如果此RealmObjectSchema
不可变。
-
removeField
public abstract RealmObjectSchema removeField(String fieldName)
从类中删除字段。- 参数:
fieldName
- 要删除的字段名称。- 返回:
- 更新后的模式。
- 抛出异常:
IllegalArgumentException
- 如果字段名称不存在。UnsupportedOperationException
- 如果此RealmObjectSchema
不可变或用于同步 Realm。
-
renameField
public abstract RealmObjectSchema renameField(String currentFieldName, String newFieldName)
将字段从一个名称重命名为另一个名称。- 参数:
currentFieldName
- 要重命名的字段名称。newFieldName
- 新字段名称。- 返回:
- 更新后的模式。
- 抛出异常:
IllegalArgumentException
- 如果字段名称不存在或新字段名称已存在。UnsupportedOperationException
- 如果此RealmObjectSchema
不可变或用于同步 Realm。
-
hasField
public boolean hasField( String fieldName)
测试类中是否具有使用给定名称定义的字段。- 参数:
fieldName
- 要测试的字段名称。- 返回:
true
如果该字段存在,否则为false
。
-
addIndex
public abstract RealmObjectSchema addIndex(String fieldName)
为给定字段添加索引。 这相当于在字段上添加Index
注解。- 参数:
fieldName
— 要添加索引的字段。- 返回:
- 更新后的模式。
- 抛出异常:
IllegalArgumentException
- 如果字段名称不存在,则无法为该字段编制索引,或者已定义该字段的索引。UnsupportedOperationException
- 如果此RealmObjectSchema
不可变。
-
hasIndex
public boolean hasIndex( String fieldName)
检查给定字段是否已定义索引。- 参数:
fieldName
- 要检查的现有字段名称。- 返回:
true
如果字段已建立索引,则返回false
。- 抛出异常:
IllegalArgumentException
- 如果字段名称不存在。- 另请参阅:
Index
-
removeIndex
public abstract RealmObjectSchema removeIndex(String fieldName)
从给定字段中删除索引。 这与删除字段上的@Index
注解相同。- 参数:
fieldName
— 要从中删除索引的字段。- 返回:
- 更新后的模式。
- 抛出异常:
IllegalArgumentException
- 如果字段名称不存在或字段没有索引。UnsupportedOperationException
- 如果此RealmObjectSchema
不可变或属于同步 Realm。
-
addPrimaryKey
public abstract RealmObjectSchema addPrimaryKey(String fieldName)
向给定字段添加主键。 这与在字段上添加PrimaryKey
注解相同。 此外,这还会向字段隐式添加Index
注解。- 参数:
fieldName
- 要设置为主键的字段。- 返回:
- 更新后的模式。
- 抛出异常:
IllegalArgumentException
- 如果字段名称不存在,则该字段不能是主键,或者已定义主键。UnsupportedOperationException
- 如果此RealmObjectSchema
不可变或属于同步 Realm。
-
removePrimaryKey
public abstract RealmObjectSchema removePrimaryKey()
从此类中删除主键。 这与从类中删除PrimaryKey
注解相同。 此外,这还会隐式从字段中删除Index
注解。- 返回:
- 更新后的模式。
- 抛出异常:
IllegalArgumentException
- 如果该类没有定义主键。UnsupportedOperationException
- 如果此RealmObjectSchema
不可变或属于同步 Realm。
-
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
- 如果该类没有定义主键。
-
转换(Transform)
public abstract RealmObjectSchema transform(RealmObjectSchema.Function function)
对当前类的每个 RealmObject 实例运行转换函数。 该对象将表示为DynamicRealmObject
。无法保证对象的返回顺序。
- 参数:
function
- 转换函数。- 返回:
- 此模式。
- 抛出异常:
UnsupportedOperationException
- 如果此RealmObjectSchema
不可变。
-
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()
-
-