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

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?

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 .

  • Acceso al dominio desde un subproceso incorrecto
  • Uso de Realm.io para almacenar valores monetarios
  • Cómo truncar todas las tablas en el reino de Android
  • Error irrecuperable. Mremap (): Falló: Fuera de memoria en la línea 188 io_realm_internal_SharedGroup.cpp
  • Cómo crear un nuevo RealmObject que contiene una RealmList
  • Clase de datos Kotlin de RealmObject
  • ¿Cómo puedo crear una base de datos Realm con datos iniciales para mi aplicación android?
  • Realm.io Android mejor enfoque para obtener los últimos 20 elementos de una tabla
  • Realm Exception 'value' no es un objeto gestionado válido
  • ¿Uso práctico de @Ignore in Realm?
  • Crear un objeto autónomo del reino en android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.