2015-11-01 49 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

謝謝,它已被修復。 –