Data object — es un nuevo tipo de declaración en Kotlin (desde la versión 1.9), que combina las propiedades de un objeto singleton y una data class. Está diseñado para casos en los que se desea tener solo una instancia de un objeto y métodos generados automáticamente como equals, hashCode, toString (similar a data class).
Antes, para almacenar entidades únicas con métodos toString() y equals() autogenerados, era necesario tener que escribir un objeto con implementaciones manuales o usar de manera comprometedora una data class con un único objeto (y no con instancias).
Los objetos singleton (object) no tienen equals, hashCode, toString autogenerados, mientras que la data class asume múltiples instancias, lo que no se adapta a modelos exhaustivos tipo enum-like.
Con la aparición de data object, ambas tareas se resuelven de manera concisa:
Ejemplo de código:
data object LoadingState data object NoData println(LoadingState == LoadingState) // true println(LoadingState.toString()) // LoadingState
Características clave:
¿En qué se diferencia un data object de un objeto normal?
Solo el data object recibe la autogeneración de los métodos equals, hashCode, toString a nivel de compilador; el objeto normal usa las implementaciones de Any (igualdad referencial, toString poco rico).
¿Se puede hacer un data object con parámetros en el constructor?
No, un data object no puede tener un constructor con parámetros. Siempre es sin parámetros, ya que solo existe una instancia.
¿Se puede heredar un data object?
Sí, un data object puede implementar interfaces, incluidas interfaces selladas, y ser parte de jerarquías de estados.
Ejemplo:
sealed interface Result data object Success : Result data object Failure : Result
El desarrollador modela "sin datos" como objeto NoData, luego lo compara con otro objeto usando equals() y obtiene un resultado inesperado (visualización referencial, no sustancial).
Ventajas:
Desventajas:
Se usa data object para estados de carga, la igualdad y la impresión se llevan a cabo según las reglas esperadas de data class. El modelo de capa utiliza de manera confiable el pattern matching en los estados.
Ventajas:
Desventajas: