¿Los modelos Realm realmente requieren getters y setters?
No puedo encontrarlo claramente documentado en cualquier lugar si getters y setters son realmente necesarios para los campos en un modelo de Realm. Por ejemplo, la documentación en https://realm.io/docs/java/latest/api/io/realm/RealmObject.html dice
La única restricción que tiene un RealmObject es que no se permite que los campos sean finales, transitorios o volátiles. Cualquier método, así como los campos públicos están permitidos. Al proporcionar constructores personalizados, un constructor público sin argumentos debe declararse y estar vacío.
- Realm.getInstance (context) no funciona más después de la migración
- Borrar la base de datos predeterminada de Android Realm
- Requisito de dominio con dos condiciones al mismo tiempo
- Compruebe dos campos con la base de datos Realm
- Realm con datos pre-poblados en activos?
Los campos anotados con Ignore no tienen estas restricciones y no requieren un getter o setter.
Lo que parece sugerir que se requiere con getters y setters para campos no ignorados. Sin embargo, la documentación en https://realm.io/docs/java/latest/#customizing-objects dice
Es posible usar RealmObjects casi como POJOs. Extendiéndose de RealmObject, puede dejar que los campos sean públicos y utilizar asignaciones simples en lugar de setters y getter.
Y luego mostrar el código de un modelo de Realm que no tiene getters y setters y en su lugar tienen campos públicos que debemos usar. De Verdad? Pensé que Realm ni siquiera almacenar ningún valor en los campos reales, por lo que la lectura y la escritura de ellos es probablemente una mala idea? Quiero decir sus documentos de depuración https://realm.io/docs/java/latest/#debugging estado:
Desafortunadamente estos valores son incorrectos porque los valores de campo no se utilizan. Realm crea un objeto proxy detrás de las escenas y reemplaza a los getters y setters con el fin de acceder a los datos persistentes en el Realm
¿Podría alguien aclararme por favor? ¿Puedo saltar getters y setters y sólo se adhieren a los campos públicos? ¿Hay algún documento completo sobre esto?
- Generar error con Realm
- Realm y Comportamiento de incremento automático (Android)
- No puede compilar la aplicación de Android con el reino
- Reino se cierra
- Cómo convertir RealmResults objeto a RealmList?
- ¿Tengo que cerrar el dominio en una base por hilo, o por uso / clase-base?
- Declaración de actualización en Realm
- Android Realm copyToRealmOrUpdate crea duplicados de objetos anidados
public
campos public
funcionan en la mayoría de los casos, y desde Realm 2.0.0 funcionan incluso en constructores de RealmObjects (permitiendo "valores por defecto"), y funcionan si acceden directamente a la propiedad.
Por ejemplo,
SomeObject obj = results.get(i); obj.blah = "Blahblah";
Esto funciona, porque el acceso de campo de RealmObjects administrado es transformado por Realm-Transformer en llamadas getter / setter de proxy (en este caso, en el método realmSet$blah
).
Este ha sido el caso desde 0.88.0, cuando Realm comenzó a ser proporcionado como un plugin de Gradle.
Sin embargo, una limitación importante es que el acceso al campo proxy no se ejecuta en las pruebas de instrumentación, porque el ámbito androidTestCompile
no ejecuta el transformador .
- .debounce () de RxJava interfiriendo con los hilos de mis observables y manejo de errores
- Acceso a datos relacionados con el proyecto desde el comando Gradle