2015-03-23 1 views
1

Что я хочу сделать, это создать собственный метод настройки для подкласса RealmOblject. Царство не позволяет нам использовать пользовательскую логику в геттерах и сеттерах, поэтому единственными доступными параметрами являются обходные пути. Есть 2 способа, которыми я знаюКак анализировать данные в сетях RealmObject?

1) Использование @Ignore, как описано в документации Realm (http://realm.io/docs/java/0.80.0/).

2) Второй способ сделать класс-оболочку, которая содержит RealmObject и должен реализовать все методы

Eg. Realm модель Score

public class Score extends RealmObject 
{ 
    private int score; 

    public int getScore() 
    { 
     return score; 
    } 

    public void setScore(int score) 
    { 
     this.score = score; 
    } 
} 

Обертка для Score

public class ScoreWrapper 
{ 
    private Score wrappedScore; 
    public int getScore() 
    { 
     return wrappedScore.getScore(); 
    } 

    public void setScore(int score) 
    { 
     //can do any custom data parsing here 
     wrappedScore.setScore(score+1); 
    } 

    public RealmObject getRealmObject() 
    { 
     return wrappedScore; 
    } 

} 

Метод 1) перерывы объекта инкапсуляция так определенно не собирается идти делать этот путь. Метод 2) действительно кажется хорошим компромиссом. Я все еще чувствую, что это злоупотребление «объектно-ориентированной» СУБД. Что было бы лучшим способом для меня сделать это?

ответ

0

Просьба инициализировать объект класса оценки в вашем классе-оболочке.

public class ScoreWrapper 
{ 
    private Score wrappedScore = getRealmObject(); 

    public int getScore() 
    { 
     return wrappedScore.getScore(); 
    } 

    public void setScore(int score) 
    { 
     //can do any custom data parsing here 
     wrappedScore.setScore(score+1); 
    } 

    public RealmObject getRealmObject() 
    { 
    if(wrappedScore==null) 
wrappedScore = new Score(); 
     return wrappedScore; 
    } 

} 

// ========================================= ===== //

И установленное значение из другого класса:

ScoreWrapper wrapper = new ScoreWrapper(); 

wrapper.setScore(scoreValue); 
3

христианин из Realm здесь. Методы получения и установки являются слабым местом, как Realm работает в настоящее время, но статические методы разрешены, поэтому в настоящее время лучшие практики, которые требуют минимального количества кода что-то вроде этого:

public class Score extends RealmObject 
{ 
    ... 

    public static void incrementScore(int score, Score score) { 
     score.setScore(score + 1); 
    } 
} 

Score obj = new Score(); 
Score.updateScore(42, obj); 

Мы активно работаем над фиксируя это, хотя, так что вы можете следить за любой прогресс здесь: https://github.com/realm/realm-java/issues/909

EDIT: от Realm Java 0.88.0 и вперед, теперь вы можете использовать методы, как обычно с Realm, так что выше может быть переписан:

public class Score extends RealmObject { 
    private int score; 

    public void incrementScore() { 
     score = score + 1; 
    } 
} 

Score obj = new Score(); 
obj.incrementScore(); 
+0

Спасибо, христианин. Это похоже на программирование OO в C со структурами снова и снова. Я попробовал это, но обнаружил, что код оказался немного беспорядочным. В любом случае я буду следить, как только мой проект будет выполнен. Надеюсь, Relam может полностью поддерживать геттеры и сеттеры к тому времени;) – Ian

Смежные вопросы