2015-11-01 18 views
5

Realmを使用する場合、Java enumクラスを格納する方法は?レルムは、列挙型を格納しサポートするためにまだあるような彼らのdocumentationからレルムに列挙型を格納するには?

、それはそうです:ブールバイト短い

フィールドタイプ レルムには、次のフィールドタイプをサポートしています""、ロングフロートダブル,文字列,日付およびバイト[]。整数型byte、short、int、およびlongは、すべてRealm内で同じ型(実際はlong型)にマップされます。さらに、RealmObjectとRealmListのサブクラスはモデル関係にも対応しています。

Objective-Cについて質問された類似の質問があり、回答がhereになっています。しかし、まだJavaのために。

+0

Objective-Cの最後の段落のリンクは、実際にはSwiftです。どちらがいいですか? :-) –

答えて

6

カスタムメソッドがなければ、残念ながら現時点ではやや面倒ですが、文字列表現を代わりに格納して列挙型に変換することができます。

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

あなたの静的メソッドで 'static'を忘れてしまったと思います。 – EpicPandaForce

+0

ありがとう、これは修正されました。 –

関連する問題