Benötigen Realm-Modelle tatsächlich Getter und Setter?

9

Ich kann es nirgendwo eindeutig finden, wenn Getter und Setter tatsächlich für Felder in einem Realm-Modell benötigt werden. Zum Beispiel sagt die Dokumentation in Ссылка

  

Die einzige Einschränkung, die ein RealmObject hat, ist, dass Felder nicht erlaubt sind   um endgültig, flüchtig oder flüchtig zu sein. Jede Methode sowie öffentlich   Felder sind erlaubt. Bei der Bereitstellung von benutzerdefinierten Konstruktoren eine öffentliche   Konstruktor ohne Argumente muss deklariert werden und leer sein.

     

Mit Ignore gekennzeichnete Felder haben diese Einschränkungen nicht und tun dies nicht   erfordern entweder einen Getter oder Setter.

Dies scheint anzudeuten, dass es mit Gettern und Setter für nicht ignorierte Felder erforderlich ist. Die Dokumentation in Ссылка lautet jedoch

  

Es ist möglich, RealmObjects fast wie POJOs zu verwenden. Ausdehnen von   RealmObject, Sie können die Felder öffentlich machen lassen und einfach verwenden   Zuweisungen anstelle von Setter und Getter.

und zeigen Sie dann den Code für ein Realm-Modell, das keine Getter und Setter hat und stattdessen öffentliche Felder hat, die wir verwenden sollten. "Ja wirklich?" Ich dachte, dass Realm überhaupt keine Werte in den tatsächlichen Feldern gespeichert hat, also ist das Lesen und Schreiben von ihnen wahrscheinlich eine schlechte Idee? Ich meine ihre Debugging-Dokumente Ссылка Status:

  

Leider sind diese Werte falsch, weil die Feldwerte nicht stimmen   benutzt. Realm erstellt ein Proxy-Objekt hinter den Kulissen und überschreibt das   Getters und Setter, um auf die persistenten Daten im Realm zuzugreifen

Könnte jemand bitte mich aufklären? Kann ich Getter und Setter überspringen und einfach bei öffentlichen Feldern bleiben? Gibt es eine gründliche Dokumentation dazu?

    
Espen Riskedal 20.09.2016, 19:41
quelle

1 Antwort

4

public -Felder funktionieren in den meisten Fällen, und seit Realm 2.0.0 funktionieren sie sogar in Konstruktoren von RealmObjects (erlauben "Standardwerte") und funktionieren, wenn Sie direkt auf die Eigenschaft zugreifen.

Zum Beispiel

%Vor%

Das funktioniert, weil der Feldzugriff von verwalteten RealmObjects vom Realm-Transformer in Proxy-Getter / Setter-Aufrufe umgewandelt wird (in diesem Fall in die realmSet$blah -Methode).

Dies ist seit 0.88.0 der Fall, als Realm als Gradle-Plugin zur Verfügung gestellt wurde.

Eine große Einschränkung ist jedoch, dass der Proxy-Feldzugriff nicht funktioniert Führen Sie keine Instrumentierungstests durch, weil der androidTestCompile -Bereich den Transformator nicht ausführt .

    
EpicPandaForce 20.09.2016, 19:47
quelle

Tags und Links