Docs 菜单
Docs 主页
/ /
Atlas Device SDKs
/ / /

枚举 RealmNamingPolicy

在此页面上

  • io.realm.annotations
  • 枚举常量摘要
  • 方法摘要
  • 继承方法
  • 枚举常量详细信息
  • CAMEL_CASE
  • IDENTITY
  • LOWER_CASE_WITH_UNDERSCORES
  • NO_POLICY
  • PASCAL_CASE
  • 方法详细信息
  • 的值
  • values
java.lang.Object
io.realm.annotations.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 变量名称时,每个变量名称都会通过将其拆分为单词列表来进行规范化,然后使用目标格式的规则将这些单词列表连接起来。 以下启发式方法用于确定“词”的构成。

  1. 每当遇到_$时。 例如“_FirstName”、“_First_Name”和“$First$Name”,它们都会成为“First”和“Name”。

  2. 每当您从小写字符切换到大写字符时,如 Character.isUpperCase(int) 所标识 Character.isLowerCase(int) 。示例是“FirstName”,它变为“First”和“Name”。

  3. 每当您从多个大写字符切换为小写字符时。 假定最后一个大写字母是下一个单词的一部分。 这是通过使用 Character.isUpperCase(int) 来标识的 Character.isLowerCase(int) 。示例是“FIRSTName”,它变为“FIRST”和“Name.

  4. 有些字符(例如表情符号)既不是大写字符,也不是小写字符,因此它们将是当前单词的一部分。 例如,“my😁”和“MY😁”都被视为一个单词。

  5. 匈牙利表示法,即以小写“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
}

提示

另请参阅:

枚举常量和描述

CAMEL_CASE

Java 模型类中的名称转换为 camelCase,即

IDENTITY

Java 模型类中的名称在内部按原样使用。

LOWER_CASE_WITH_UNDERSCORES

Java 模型类中的名称将转换为小写,每个单词用_分隔。

NO_POLICY

未应用任何策略。

PASCAL_CASE

Java 模型类中的名称转换为 PascalCase,即

修饰符和类型
方法和说明
公共静态RealmNamingPolicy
公共静态RealmNamingPolicy
  • 从类 java.lang.Object 继承的方法 :getClasshashCodeequalsclonetoStringnotifynotifyAllwaitwaitwaitfinalize

  • 从类 java.lang.Enum 继承的方法 :nameordinaltoStringequalshashCodeclonecompareTogetDeclaringClassvalueOffinalize

public static final RealmNamingPolicy

Java 模型类中的名称将转换为驼峰命名法,即所有单词都连接在一起,第一个单词的第一个字母小写,所有后续单词的第一个字母大写。 这是 Java、Kotlin、Swift 和 JavaScript 中的标准命名模式。示例:“firstName”、“FirstName”、“mFirstName”、“FIRST_NAME”、“First$Name” 全部变为“firstName”。

public static final RealmNamingPolicy

Java 模型类中的名称在内部按原样使用。

public static final RealmNamingPolicy

Java模型类中的名称将转换为小写,每个单词用_分隔。 这是C++中的默认命名方案。

示例:"firstName"、"FirstName"、"mFirstName"、"FIRST_NAME"、"First$Name" 均会变为 "first_name"。

public static final RealmNamingPolicy

未应用任何策略。 该策略不会覆盖在父元素上设置的任何策略,例如,如果在RealmClass.fieldNamingPolicy中设置,则模块策略仍将应用于字段名称。

如果两个模块对该策略存在分歧,且其中一个模块为NO_POLICY ,则系统会选择另一个模块,而不会引发错误。

此策略为默认策略。

public static final RealmNamingPolicy

Java 模型类中的名称将转换为 PascalCase,即所有单词都连接在一起,并且所有单词的首字母大写。 这是 .NET 中的默认命名方案。示例:"firstName"、"FirstName"、"mFirstName"、"FIRST_NAME"、"First$Name" 均会变为 "FirstName"。

public static RealmNamingPolicy valueOf (
String name
)
public static RealmNamingPolicy values ()

后退

RealmModule