https://forum.android.com.pl/topic/353829-data-class-czyli-jak-skr%C3%B3ci%C4%87-kod-klasy-o-90-w-por%C3%B3wnaniu-do-javy/ pozwala nam w ciekawy sposób wyciągać informacje z obiektu. Mając klasę:
data class PhoneModel(
val battery: String,
val developer: String,
val displaySize: Double,
val modelName: String,
val processor: String
)
i jej instancję możemy rozbić ją na poszczególne pola:
val phoneModel = PhoneModel("36000 mAh", "NAJLEPSZE SMARTPHONY", 6.0, "NewOne", "Najszybszy")
val (battery, developer, displaySize, modelName, processor) = phoneModel
println(battery)
println(developer)
println(displaySize)
println(modelName)
println(processor)
Mechanizm ten bazuje na metodach component. Które są tworzone automatycznie dla data class. Jedna metoda component przypada na jedno pole w klasie i pozwala pobrać zawartość tego pola. Metody component są numerowane zaczynając od 1 i numeracja jest tworzona zgodnie z deklaracją pól w klasie. Czyli dla klasy PhoneModel metoda component3() będzie zwracać displaySize, a component1() zwróci battery. Dekomponując musimy o tym pamiętać. Ponieważ kolejność parametrów ma tutaj znaczenie:
val (displaySize, processor) = phoneModel
W powyższym przykładzie oczekiwalibyśmy pobrania informacji o rozmiarze ekranu i procesorze. Jednak tutaj wywołają się metody component1() i component2(). Czyli dostaniemy informację o baterii i firmie która stworzyła dany model telefonu.