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?
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 .