Junior
Como funcionam as classes de dados em Kotlin?
sobes.tech IA
Resposta da IA
As classes de dados em Kotlin são usadas para armazenar dados. O compilador gera automaticamente os métodos padrão:
equals(): Compara instâncias com base nos valores de suas propriedades.hashCode(): Gera um código hash com base nos valores das propriedades.toString(): Retorna uma representação em string que inclui nomes e valores de todas as propriedades.copy(): Cria uma cópia do objeto, alterando os valores das propriedades indicadas, se necessário.componentN(): Métodos para desestruturação (descomposição do objeto em propriedades individuais).
// Exemplo de classe de dados
data class User(val name: String, val age: Int)
fun main() {
val user1 = User("Alice", 30)
val user2 = User("Alice", 30)
val user3 = User("Bob", 25)
// equals()
println(user1 == user2) // true
println(user1 == user3) // false
// toString()
println(user1.toString()) // User(name=Alice, age=30)
// copy()
val user4 = user1.copy(age = 31)
println(user4) // User(name=Alice, age=31)
// componentN() e desestruturação
val (name, age) = user1
println("Nome: $name, Idade: $age") // Nome: Alice, Idade: 30
}
Pontos-chave:
- Todas as propriedades definidas no construtor principal devem ser
valouvar. - A classe de dados não pode ser
abstract,open,sealedouinner. - Classes de dados podem herdar outras classes ou implementar interfaces.
- Propriedades declaradas fora do construtor principal não participam na geração dos métodos padrão.
| Método | Descrição |
|---|---|
equals() |
Compara as propriedades do construtor principal. |
hashCode() |
Gera um hash com base nas propriedades do construtor principal. |
toString() |
Exibe uma representação em string das propriedades do construtor principal. |
copy() |
Cria uma cópia superficial com a possibilidade de modificar propriedades. |
componentN() |
Acessa as propriedades na ordem de sua declaração no construtor. |
As classes de dados simplificam significativamente o trabalho com POJO (Plain Old Java Object) ou DTO (Data Transfer Object), reduzindo o código boilerplate.