枚举 RealmNamingPolicy
- java.lang.Object
-
- java.lang.Enum < RealmNamingPolicy >
-
- io.realm.annotations.RealmNamingPolicy
-
- 所有已实现的接口:
Serializable
,Comparable<RealmNamingPolicy>
public enum RealmNamingPolicy extends Enum<RealmNamingPolicy>
该枚举定义了将类名和字段名从 Java 中使用的名称映射到 Realm 文件内部使用的名称的可能方法。有用的示例:
- 支持具有相同简单名称但位于不同包中的两个模型类。
- 由于命名约定不同,因此可以更轻松地使用跨平台模式。
- 使用长度超过 Realm 强制执行的 57 个字符限制的 Java 类名。
- 在 Java 中更改字段名称而不强制应用用户完成迁移过程。
-
如果应用于
RealmModule.classNamingPolicy()
,该模块的所有类部分都会受到影响。 如果一个类是多个模块的一部分,则必须对这两个模块应用相同的命名策略,否则会引发错误。 -
如果应用于
RealmModule.fieldNamingPolicy()
,此模块的所有类部分中的所有持久字段都将受到影响。 -
如果应用于
RealmClass.fieldNamingPolicy()
,该类中的所有字段都会受到影响。 这将覆盖模块上指定的任何字段命名策略。
示例:
\@RealmClass(name = "__person", fieldNamingPolicy = RealmNamingPolicy.LOWER_CASE_WITH_UNDERSCORES) public class Person implements RealmModel { // is converted to "__person" internally public string firstName; // Is converted to "first_name" internally }
选择与 Java 模型类中使用的名称不同的内部名称会产生以下影响:
-
对
DynamicRealm
的查询必须使用内部名称。 对普通Realm
实例的查询必须继续使用 Java 类中定义的名称。 - 在创建类和字段时,迁移必须使用内部名称。
- 报告的模式错误将使用内部名称。
自动转换 Java 变量名称时,每个变量名称都会通过将其拆分为单词列表来进行规范化,然后使用目标格式的规则将这些单词列表连接起来。 以下启发式方法用于确定“词”的构成。
-
每当遇到
_
或$
时。 例如“_FirstName”、“_First_Name”和“$First$Name”,它们都会成为“First”和“Name”。 -
每当您从小写字符切换到大写字符时,如
Character.isUpperCase(int)
和Character.isLowerCase(int)
标识的那样。 示例是“FirstName”,它变为“First”和“Name”。 -
每当您从多个大写字符切换为小写字符时。 假定最后一个大写字母是下一个单词的一部分。 这是通过使用
Character.isUpperCase(int)
和Character.isLowerCase(int)
来标识的。 示例是“FIRSTName”,它变为“FIRST”和“Name. - 有些字符(例如表情符号)既不是大写字符,也不是小写字符,因此它们将是当前单词的一部分。 例如,“my😁”和“MY😁”都被视为一个单词。
- 匈牙利表示法,即以小写“m”开头,后跟大写字母的变量名称,将被删除,不被视为任何单词的一部分。 示例为“mFirstName”和“mFIRSTName”,它们分别变为“First”和“Name”。
请注意,更改内部名称不会影响从 JSON 导入数据。 JSON 数据仍须遵循 Realm Java 类中定义的名称。
在使用 Moshi、GSON 或 Jackson 等标准库解析 JSON 时,请务必记住,这些库定义从 JSON 到 Java 的转换,而设置内部 Realm 名称定义从 Java 到 Realm 文件的转换。
这意味着,如果您想使用这些库将数据从 JSON 导入 Realm,您仍然需要提供来自 JSON 解析器库和 Realm 的注解。
使用 Moshi,它看起来像这样:
public class Person extends RealmObject { \@Json(name = "first_name") // Name used in JSON input. \@RealmField(name = "first_name") // Name used internally in the Realm file. public string firstName; // name used in Java }
- 另请参阅:
RealmModule
,RealmClass
,RealmField
-
-
枚举常量摘要
枚举常量 枚举常量 说明 CAMEL_CASE
Java 模型类中的名称转换为 camelCase,即IDENTITY
Java 模型类中的名称在内部按原样使用。LOWER_CASE_WITH_UNDERSCORES
Java 模型类中的名称将转换为小写,每个单词用_
分隔。NO_POLICY
未应用任何策略。PASCAL_CASE
Java 模型类中的名称转换为 PascalCase,即
-
-
-
枚举常量详细信息
-
NO_POLICY
public static final RealmNamingPolicy NO_POLICY
未应用任何策略。 此策略不会覆盖在父元素上设置的任何策略,例如,如果在RealmClass.fieldNamingPolicy()
中设置,则模块策略仍将应用于字段名称。如果两个模块对该策略存在分歧,且其中一个模块为
NO_POLICY
,则系统会选择另一个模块,而不会引发错误。此策略为默认策略。
-
IDENTITY
public static final RealmNamingPolicy IDENTITY
Java 模型类中的名称在内部按原样使用。
-
CAMEL_CASE
public static final RealmNamingPolicy CAMEL_CASE
Java 模型类中的名称将转换为驼峰命名法,即所有单词都连接在一起,第一个单词的第一个字母小写,所有后续单词的第一个字母大写。 这是 Java、Kotlin、Swift 和 JavaScript 中的标准命名模式。示例:"firstName"、"FirstName"、"mFirstName"、"FIRST_NAME"、"First$Name" 均会变为 "firstName"。
-
PASCAL_CASE
public static final RealmNamingPolicy PASCAL_CASE
Java 模型类中的名称将转换为 PascalCase,即所有单词都连接在一起,并且所有单词的首字母大写。 这是 .NET 中的默认命名方案。示例:"firstName"、"FirstName"、"mFirstName"、"FIRST_NAME"、"First$Name" 均会变为 "FirstName"。
-
LOWER_CASE_WITH_UNDERSCORES
public static final RealmNamingPolicy LOWER_CASE_WITH_UNDERSCORES
Java 模型类中的名称将转换为小写,每个单词用_
分隔。 这是 C++ 中的默认命名方案。示例:"firstName"、"FirstName"、"mFirstName"、"FIRST_NAME"、"First$Name" 均会变为 "first_name"。
-
-
方法详细信息
-
values
public static RealmNamingPolicy[] values()
按声明顺序返回包含此枚举类型常量的数组。 此方法可用于迭代常量,如下所示:for (RealmNamingPolicy c : RealmNamingPolicy.values()) System.out.println(c);
- 返回:
- 包含此枚举类型常量的数组,按声明顺序排列
-
的值
public static RealmNamingPolicy valueOf(String name)
返回具有指定名称的该类型的枚举常量。 该字符串必须与用于声明此类型的枚举常量的标识符完全匹配。 (不允许使用多余的空白字符。)- 参数:
name
- 要返回的枚举常量的名称。- 返回:
- 具有指定名称的枚举常量
- 抛出异常:
IllegalArgumentException
- 如果此枚举类型没有指定名称的常量NullPointerException
- 如果参数为 null
-
-