2015-11-01 15 views
5

Jak przechowywać klasy wyliczeniowe Java podczas korzystania z Realm?Jak przechowywać wyliczenia w Królestwie?

z ich documentation, wydaje się Realm jest jeszcze wspierać przechowywanie teksty stałe:

typy pól Realm obsługuje następujące typy pól: logiczna, bajt, krótkie, ìnt, długi, float, podwójny, String, Data i bajt []. Typy całkowite: bajt, short, int i long są odwzorowane na ten sam typ (faktycznie długość) w obrębie dziedziny. Ponadto podklasy RealmObject i RealmList są obsługiwane w relacjach modeli.

Istnieją podobne pytania, które zostały zadane w celu C i otrzymałem odpowiedź here. Jednak jeszcze nie w Javie.

+0

To łącze w ostatnim akapicie dla Celu-C jest w rzeczywistości dla Swift. Co jest miłe. :-) –

Odpowiedz

6

Bez niestandardowych metod jest niestety nieco uciążliwy, ale zamiast tego można zapisać reprezentację ciągów i przekonwertować ją na 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

Myślę, że zapomniałeś 'statycznego' na twoich statycznych metodach – EpicPandaForce

+0

Dzięki, Zostało to naprawione. –