枚举 RealmNamingPolicy
在此页面上
io.realm.annotations
此枚举定义了将类名和字段名从Java中使用的名称映射到Realm 文件内部使用的名称的可能方法。此枚举有用的示例:
支持具有相同简单名称但位于不同包中的两个模型类。
由于命名约定不同,因此可以更轻松地使用跨平台模式。
使用长度超过 Realm 强制执行的 57 个字符限制的 Java 类名。
在 Java 中更改字段名称而不强制应用用户完成迁移过程。
根据策略的应用位置,其语义略有不同:
如果应用于RealmModule.classNamingPolicy 该模块的所有类部分都会受到影响。 如果一个类是多个模块的一部分,则必须对这两个模块应用相同的命名策略,否则会引发错误。
如果应用于RealmModule.fieldNamingPolicy 此模块的所有类部分中的所有持久字段都将受到影响。
如果应用于RealmClass.fieldNamingPolicy ,该类中的所有字段都会受到影响。 这将覆盖模块上指定的任何字段命名策略。
示例:
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 { // Name used in JSON input. // Name used internally in the Realm file. public string firstName; // name used in Java }
枚举常量摘要
枚举常量和描述 |
---|
Java 模型类中的名称转换为 camelCase,即 |
Java 模型类中的名称在内部按原样使用。 |
Java 模型类中的名称将转换为小写,每个单词用 |
未应用任何策略。 |
Java 模型类中的名称转换为 PascalCase,即 |
方法摘要
修饰符和类型 | 方法和说明 |
---|---|
values () |
继承方法
从类 java.lang.Object 继承的方法 :
getClass
、hashCode
、equals
、clone
、toString
、notify
、notifyAll
、wait
、wait
、wait
、finalize
从类 java.lang.Enum 继承的方法 :
name
、ordinal
、toString
、equals
、hashCode
、clone
、compareTo
、getDeclaringClass
、valueOf
、finalize
枚举常量详细信息
CAMEL_CASE
public static final RealmNamingPolicy
Java 模型类中的名称将转换为驼峰命名法,即所有单词都连接在一起,第一个单词的第一个字母小写,所有后续单词的第一个字母大写。 这是 Java、Kotlin、Swift 和 JavaScript 中的标准命名模式。示例:“firstName”、“FirstName”、“mFirstName”、“FIRST_NAME”、“First$Name” 全部变为“firstName”。
IDENTITY
public static final RealmNamingPolicy
Java 模型类中的名称在内部按原样使用。
LOWER_CASE_WITH_UNDERSCORES
public static final RealmNamingPolicy
Java模型类中的名称将转换为小写,每个单词用_
分隔。 这是C++中的默认命名方案。
示例:"firstName"、"FirstName"、"mFirstName"、"FIRST_NAME"、"First$Name" 均会变为 "first_name"。
NO_POLICY
public static final RealmNamingPolicy
未应用任何策略。 该策略不会覆盖在父元素上设置的任何策略,例如,如果在RealmClass.fieldNamingPolicy中设置,则模块策略仍将应用于字段名称。
如果两个模块对该策略存在分歧,且其中一个模块为NO_POLICY
,则系统会选择另一个模块,而不会引发错误。
此策略为默认策略。
PASCAL_CASE
public static final RealmNamingPolicy
Java 模型类中的名称将转换为 PascalCase,即所有单词都连接在一起,并且所有单词的首字母大写。 这是 .NET 中的默认命名方案。示例:"firstName"、"FirstName"、"mFirstName"、"FIRST_NAME"、"First$Name" 均会变为 "FirstName"。
方法详细信息
的值
values
public static RealmNamingPolicy values () |
---|