Enums 支持 Realm?

2022-09-01 22:03:10

我正在开发一个Android应用程序和Realm,我需要为我的一个对象创建一个枚举属性;但我在这篇文章中发现Realm还不支持枚举。

我的对象是这样的:

public class ShuttleOption extends RealmObject {
    private int Id;
    private String Label;
    private ShuttleTypes OriginShuttleType;
}

我的枚举类(ShuttleTypes)对应于:

HOME = 1;  

WORK = 2;

任何人都可以建议我怎么做吗?


答案 1

您可以使用问题中描述的模式:https://github.com/realm/realm-java/issues/776#issuecomment-190147079

基本上,在 Realm 中将其保存为字符串,然后将其转换到输入和输出:

public enum MyEnum {
  FOO, BAR;
}

public class Foo extends RealmObject {
  private String enumDescription;

  public void saveEnum(MyEnum val) {
    this.enumDescription = val.toString();
  }

  public MyEnum getEnum() {
    return MyEnum.valueOf(enumDescription);
  }
}

答案 2

如果您需要一个适用于 Kotlin 的解决方案,则可以使用以下方法:

open class Foo: RealmObject() {
    var enum: MyEnum
        get() { return MyEnum.valueOf(enumDescription) }
        set(newMyEum) { enumDescription = newMyEnum.name }
    private var enumDescription: String = MyEnum.FOO.name
}

MyEnum是答案中声明@ChristianMelchior枚举。

值得一提的是,由于没有后备场,它不会持久化到 Realm 中。无需在其上使用注释enum@Ignore