2015-11-01 81 views
5

如何在使用Realm时存储Java枚举类?如何在Realm中存储枚举?

从他们documentation,好像境界还未支持存储枚举:

字段类型 领域支持以下字段类型:布尔字节ìnt,floatdouble字符串,日期字节[]。整数类型byte,short,int和long都被映射到Realm中的相同类型(实际上很长)。此外,模型关系还支持RealmObject和RealmList的子类。

也有类似的问题被问及Objective-C并得到了回答here。 Java还没有。

+0

Objective-C的最后一段中的链接实际上是Swift。这很好。 :-) –

回答

6

如果没有自定义方法,不幸的是目前有点麻烦,但是您可以存储字符串表示,并将其转换为enum。

public enum Foo { 
    FOO 
} 

// V1: Using static methods 
public class Bar1 extends RealmObject { 
    private String enumValue; 

    // Getters/setters 

    // Static methods to handle the enum values 
    public static Foo getEnum(Bar1 obj) { 
    return Foo.valueOf(obj.getEnumValue()) 
    } 

    public static Foo setEnum(Bar1 obj, Foo enum) { 
    return obj.setEnumValue(enum.toString()); 
    } 
} 

// V2: Use a dummy @Ignore field to create getters/setters you can override yourself. 
public class Bar2 extends RealmObject { 

    private String enumValue; 

    // Dummy field 
    @Ignore 
    private String enum; 

    public void setEnumValue(String enumValue) { 
    this.enumValue = enumValue; 
    } 

    public String getEnumValue() { 
    return enumValue; 
    } 

    public void setEnum(Foo foo) { 
    setEnumValue(foo.toString()); 
    } 

    public Foo getEnum() { 
    return Foo.valueOf(getEnumValue()); 
    } 
} 
+0

我想你忘记了静态方法的“静态” – EpicPandaForce

+0

谢谢,它已被修复。 –