Data object is een nieuw type declaraties in Kotlin (vanaf versie 1.9), dat de eigenschappen van een singleton-object en data class combineert. Het is bedoeld voor gevallen waarin je maar één exemplaar van een object wilt hebben en automatisch gegenereerde methoden zoals equals, hashCode, toString (zoals bij data class).
Voorheen was het nodig om een object met handmatig geïmplementeerde methoden te schrijven om unieke entiteiten met automatisch gegenereerde toString() en equals() op te slaan, of er was een compromis nodig om een data class met een enkel object (in plaats van exemplaren) te gebruiken.
Singleton-objecten (object) hebben geen automatisch gegenereerde equals, hashCode, toString, terwijl een data class meerdere exemplaren veronderstelt, wat niet geschikt is voor uitputtende enum-achtige modellen.
Met de komst van data object worden beide taken beknopt opgelost:
Codevoorbeeld:
data object LoadingState data object NoData println(LoadingState == LoadingState) // true println(LoadingState.toString()) // LoadingState
Belangrijkste kenmerken:
Wat is het verschil tussen data object en een gewone object?
Slechts data object krijgt automatisch gegenereerde methoden zoals equals, hashCode, toString op compilatieniveau; een gewone object gebruikt implementaties van Any (referentiële gelijkheid, beperkte toString).
Kan je een data object met constructorparameters maken?
Nee, een data object kan geen constructor met parameters hebben. Het is altijd parameterloos, omdat er slechts één exemplaar bestaat.
Kan een data object geërfd worden?
Ja, een data object kan interfaces implementeren, waaronder sealed interface, en deel uitmaken van hiërarchieën van toestanden.
Voorbeeld:
sealed interface Result data object Success : Result data object Failure : Result
Een ontwikkelaar modeleert "geen gegevens" als object NoData, vergelijkt dan met een extern object met equals() en krijgt een onverwacht resultaat (referentiële vergelijking in plaats van inhoudelijke).
Voordelen:
Nadelen:
Er wordt een data object gebruikt voor laadstatussen, gelijkheid en afdrukken gebeurt volgens de verwachte data class-regels. De modellaag gebruikt betrouwbaar patroonmatching op toestanden.
Voordelen:
Nadelen: