2015-11-01 16 views
5

Come memorizzare classi di enumerazione Java quando si utilizza Realm?Come memorizzare le enumerazioni in Realm?

Dalla loro documentation, sembra che Realm è ancora da sostenere enumerazioni memorizzazione:

tipi di campo Reame supporta i seguenti tipi di campo: booleano, byte, breve, non, lungo, galleggiante, doppio, Stringa, Data e byte []. I tipi interi byte, short, int e long sono tutti mappati sullo stesso tipo (molto lungo) all'interno di Realm. Inoltre, le sottoclassi di RealmObject e RealmList sono supportate per modellare le relazioni.

ci sono domanda simile che è stato chiesto di Objective-C, ma ho risposto here. Nessuno ancora per Java però.

+0

Quel collegamento nell'ultimo paragrafo per Objective-C è in realtà per Swift. Che è bello :-) –

risposta

6

In assenza di metodi personalizzati è purtroppo alquanto ingombrante al momento, ma è possibile memorizzare la rappresentazione della stringa e convertirla in/dall'enumerazione.

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

Penso che tu abbia dimenticato il 'statico' sui tuoi metodi statici – EpicPandaForce

+0

Grazie, è stato corretto. –