安装包 io.realm

RealmAny 类


  • public class RealmAny
    extends Object
    RealmAny 用于表示多态 Realm 值。

    在任何特定时刻,此类的实例都会存储确定类型的确定值。 如果,实例,这是一个双精度值,则可以调用 asDouble() 来提取该值。您可以调用 getType() 来了解当前存储的值类型。 在不存储双精度值的实例上调用 asDouble() 会引发ClassCastException

    RealmAny 在所有支持的类型上的行为类似于值类型,但 Realm 对象除外。 这意味着 Realm 不会持久化对 RealmAny 值的任何更改,除非类型为 Realm 对象。 当 RealmAny 持有 Realm 对象时,它只是持有该对象的引用,而不是该对象的副本。 因此,对 Realm 对象的修改会反映在 RealmAny 值中,包括是否删除该对象。 由于 RealmAny 实例不可变,因此需要新实例来更新 RealmAny 属性。

     
          anObject.realmAnyAttribute = RealmAny.valueOf(5);
          anObject.realmAnyAttribute = RealmAny.valueOf(10.f);
     
     
    提取特定类型值的行为需要对存储类型有明确的了解,了解这一点至关重要。 为任何特定类型(与存储的值不是同一类型)调用 getter 方法都会引发异常。

    在处理 RealmAny 多态性时,我们建议围绕 RealmAny 类型及其内部值类编写一个 switch case。

     
          RealmAny realmAny = aRealmObject.realmAnyAttribute;
    
          switch (realmAny.getType()) {
              case OBJECT:
                  if (realmAny.getValueClass().equals(DogRealmModel.class)) {
                      DogRealmModel value = realmAny.asRealmModel(DogRealmModel.class);
                  }
              case INTEGER:
                  performAction(realmAny.asInteger());
                  break;
              case BOOLEAN:
                  performAction(realmAny.asBoolean());
                  break;
              case STRING:
                  performAction(realmAny.asString());
                  break;
              case BINARY:
                  performAction(realmAny.asBinary());
                  break;
              case DATE:
                  performAction(realmAny.asDate());
                  break;
              case FLOAT:
                  performAction(realmAny.asFloat());
                  break;
              case DOUBLE:
                  performAction(realmAny.asDouble());
                  break;
              case DECIMAL128:
                  performAction(realmAny.asDecimal128());
                  break;
              case OBJECT_ID:
                  performAction(realmAny.asObjectId());
                  break;
              case UUID:
                  performAction(realmAny.asUUID());
                  break;
              case NULL:
                  performNullAction();
                  break;
          }
     
     

    getValueClass() 返回表示由 RealmAny 实例包装的内部值的 Java 类。 如果生成的类是RealmModel的实现,则可以调用 asRealmModel() 将 RealmAny 值转换为 Realm 对象引用。

    RealmAny 值也可以进行排序。 不同 RealmAny 类型之间使用的排序顺序(从低到高)为:

    1. 布尔
    2. 字节/短整型/整数/长整型/浮点型/双精度型/十进制 128
    3. 字节[]/字符串
    4. Date
    5. ObjectId
    6. UUID
    7. RealmObject
    这会对RealmQuery.sort(String)RealmQuery.minRealmAny(String)RealmQuery.maxRealmAny(String)的工作方式产生影响。 特别是min()max()不仅会考虑数字字段,还会使用排序顺序来确定“最大”或“最小”值。
    • 方法详细信息

      • getType

        公共RealmAny.Type getType()
        获取此 RealmAny 对象的内部类型。
        返回:
        内部 RealmAny.Type
      • getValueClass

        @Nullable
        public Class<?> getValueClass()
        返回表示由此 RealmAny 值包装的内部值的 Java 类。
        返回:
        表示由此 RealmAny 值包装的内部值的类。
      • 的值

        public static RealmAny valueOf​(@Nullable
                                       byte[] value)
        使用指定值创建新的 RealmAny。 如果值不为 null,则类型将为RealmAny.Type.BINARY ,否则为RealmAny.Type.NULL
        参数:
        value - RealmAny 值。
        返回:
        字节 [] 的新 RealmAny。
      • nullValue

        public static RealmAny nullValue()
        创建空值的新 RealmAny。
        返回:
        null 值的新 RealmAny 实例。
      • 的值

        public static RealmAny valueOf​(@Nullable
                                       RealmModel value)
        使用指定值创建新的 RealmAny。
        参数:
        value - RealmAny 值。
        返回:
        RealmModel 的新 RealmAny。
      • IsNull

        public boolean isNull()
        如果内部值为 null,则返回 true,否则返回 false。
        返回:
        如果内部值为 null,则为 true,否则为 false。
      • asByte

        public Byte asByte()
        如果该值是 1,则获取 Byte 形式的值,否则抛出异常。
        返回:
        一个字节。
        抛出异常:
        ClassCastException - 如果该值不是预期的类型。
      • asShort

        公共asShort()
        如果此值是 1,则将其作为 Short 获取,否则会引发异常。
        返回:
        短视频。
        抛出异常:
        ClassCastException - 如果该值不是预期的类型。
      • asInteger

        public Integer asInteger()
        如果该值是 1,则以整数形式获取该值,否则抛出异常。
        返回:
        一个整数。
        抛出异常:
        ClassCastException - 如果该值不是预期的类型。
      • asLong

        public Long asLong()
        如果该值是 1,则获取 Long 值,否则抛出异常。
        返回:
        长整型。
        抛出异常:
        ClassCastException - 如果该值不是预期的类型。
      • asBoolean

        public Boolean asBoolean()
        如果该值是 1,则获取布尔值形式,否则抛出异常。
        返回:
        一个布尔值。
        抛出异常:
        ClassCastException - 如果该值不是预期的类型。
      • asFloat

        public Float asFloat()
        如果该值是 1,则获取 Float 形式的值,否则抛出异常。
        返回:
        一个 Float。
        抛出异常:
        ClassCastException - 如果该值不是预期的类型。
      • asDouble

        public Double asDouble()
        如果该值是 1,则获取 Double 形式的值,否则抛出异常。
        返回:
        一个 Double。
        抛出异常:
        ClassCastException - 如果该值不是预期的类型。
      • asString

        public String asString()
        如果该值是 1,则以字符串形式获取该值,否则抛出异常。
        返回:
        一个字符串,
        抛出异常:
        ClassCastException - 如果该值不是预期的类型。
      • asBinary

        public byte[] asBinary()
        如果该值是 1,则以字节[] 形式获取该值,否则抛出异常。
        返回:
        一个字节[]。
        抛出异常:
        ClassCastException - 如果该值不是预期的类型。
      • asDate

        public Date asDate()
        如果此值是 1,则获取 Date 形式的值,否则抛出异常。
        返回:
        日期。
        抛出异常:
        ClassCastException - 如果该值不是预期的类型。
      • asObjectId

        public ObjectId asObjectId()
        如果此值是 1,则将其作为 ObjectId 获取,否则将引发异常。
        返回:
        ObjectId。
        抛出异常:
        ClassCastException - 如果该值不是预期的类型。
      • asUUID

        公共UUID asUUID()
        如果此值是 1,则将其作为 UUID 获取,否则将引发异常。
        返回:
        UUID。
        抛出异常:
        ClassCastException - 如果该值不是预期的类型。
      • asDecimal128

        public Decimal128 asDecimal128()
        如果该值是 1,则获取 Decimal128 形式的值,否则抛出异常。
        返回:
        a Decimal128。
        抛出异常:
        ClassCastException - 如果该值不是预期的类型。
      • asRealmModel

        public <T extends RealmModel> T asRealmModel​(Class<T> clazz)
        如果此值是 1,则将其作为 RealmModel 获取,否则会引发异常。
        类型参数:
        T - 内部值要转换到的 RealmModel 类型。
        返回:
        T 类型的 RealmModel。
        抛出异常:
        ClassCastException - 如果该值不是预期的类型。
      • hashCode

        public final int hashCode()
        RealmAny的哈希码正是其值的哈希码。
        覆盖:
        hashCode 课堂上 Object
        返回:
        如果目标具有相同的值,则为 true
        抛出异常:
        NullPointerException - 如果内部值为 null
      • 等于

        public final boolean equals​(@Nullable
                                    Object other)
        两个RealmAny.equals ,当且仅当它们的内容相等。
        覆盖:
        equals 课堂上 Object
        参数:
        other - 比较目标
        返回:
        如果目标具有相同的值,则为 true