2015-11-01 6 views
5

Wie werden Java enum-Klassen gespeichert, wenn Realm verwendet wird?Wie speichert man Enums in Realm?

Aus ihrer documentation, scheint es wie Realm noch Speicherung Aufzählungen zu unterstützen:

Feldtypen Realm unterstützt die folgenden Feldtypen: boolean, Byte, kurz, , lang, float, double, Zeichenfolge, Datum und byte []. Die Integer-Typen byte, short, int und long sind alle auf den gleichen Typ (eigentlich long) innerhalb von Realm abgebildet. Darüber hinaus werden Unterklassen von RealmObject und RealmList unterstützt, um Beziehungen zu modellieren.

Es gibt ähnliche Frage, die für Objective-C gestellt wurde und wurde beantwortet here. Noch keine für Java.

+0

Dieser Link im letzten Absatz für Objective-C ist eigentlich für Swift. Was nett ist. :-) –

Antwort

6

Ohne benutzerdefinierte Methoden ist es im Moment leider etwas umständlich, aber Sie können stattdessen die String-Darstellung speichern und diese in/aus der Enumeration konvertieren.

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

Ich glaube, du hast das 'statische' auf deinen statischen Methoden vergessen – EpicPandaForce

+0

Danke, es wurde behoben. –