data class i Kotlin är en speciell klass typ som är avsedd enbart för att lagra data. Kompilatorn genererar automatiskt metoderna equals, hashCode, toString, copy och componentN baserat på egenskaperna som anges i primary constructor. Enligt JetBrains dokumentation (2026) kan data class minska mängden boilerplate-kod med 50–70% jämfört med Java-motsvarigheter och utgör grunden för value-objekt i Kotlin-projekt.
Huvudpunkter
data class är en syntaktisk konstruktion i Kotlin som automatiskt genererar standardmetoder för klasser vars huvudsyfte är att lagra data. Vid deklaration av en data class skapar kompilatorn implementeringar av equals, hashCode, toString, copy och componentN baserat på alla egenskaper från primary constructor.
Till skillnad från vanliga klasser i Java, där utvecklaren manuellt måste skriva getters, setters, equals, hashCode och toString med hjälp av IDE eller bibliotek som Lombok, tillhandahåller Kotlin en inbyggd mekanism. Detta förkortar inte bara koden utan garanterar också konsekvens — automatiska metoder motsvarar alltid den aktuella egenskapsstrukturen.
Enligt data från JetBrains Kotlin Survey (2025) används data class i 78% av Kotlin-projekten, vilket gör det till en av de mest efterfrågade funktionerna i språket. Det är särskilt populärt i arkitekturer med DTO, API-svarsmodeller och tillståndsobjekt i MVVM.
data class deklareras med nyckelordet data före class. Alla egenskaper som deltar i de automatiska metoderna anges i primary constructor.
data class User(
val id: Int,
val name: String,
val email: String
)
En rad kod ersätter dussintals rader boilerplate i Java. Kompilatorn genererar equals, hashCode, toString, copy och component1–component3 för alla tre egenskaper.
Automatiska metoder omfattar endast egenskaper från primary constructor. Om du deklarerar en egenskap i klasskroppen deltar den inte i equals, hashCode, toString och copy.
data class Product(
val id: Int,
val title: String
) {
var cachedPrice: Double = 0.0
// cachedPrice ingår INTE i equals/hashCode/copy
}
Primary constructor för en data class måste innehålla minst en parameter. Alla parametrar måste vara markerade med val eller var. Modifierarna open, abstract, sealed eller inner kan inte användas för data class.
equals och hashCode genereras baserat på värdena av alla egenskaper från primary constructor. Två instanser av en data class anses lika om alla deras motsvarande egenskaper är lika.
I Java är standardobjektjämförelse referensjämförelse (==). För värdebaserad jämförelse krävs överskuggning av equals. Kotlin data class gör detta automatiskt, vilket möjliggör användning av == för strukturell jämförelse.
data class Address(
val city: String,
val street: String
)
val a1 = Address("Moscow", "Tverskaya")
val a2 = Address("Moscow", "Tverskaya")
println(a1 == a2) // sant
Metoden toString returnerar en läsbar representation av objektet med namn och värden för alla egenskaper. Detta förenklar loggning och felsökning avsevärt jämfört med Java, där som standard hash-koden visas i hexadecimalt format.
Enligt Kotlin Documentation (2026) har toString för data class formatet: “User(id=1, name=John, email=john@example.com)”. När egenskaper tas bort från primary constructor uppdateras toString automatiskt — risken för desynkronisering är utesluten.
copy — en av de viktigaste funktionerna i data class. Skapar en ytlig kopia av objektet med möjlighet att ändra värden för angivna egenskaper.
data class Order(
val id: Long,
val status: String,
val amount: Double
)
val order = Order(1L, "Pending", 299.99)
val updatedOrder = order.copy(status = "Confirmed")
// updatedOrder.id = 1L, amount = 299.99, status = “Confirmed”
copy är oumbärlig i funktionell stil och arkitekturer med oföränderlighet (immutability). Istället för mutation av ett befintligt objekt skapas en ny kopia med ändrade fält, vilket gör koden mer förutsägbar och säker i flertrådade scenarier.
data class genererar automatiskt funktionerna component1, component2 och så vidare för varje egenskap i deklarationsordning. Detta möjliggör destrukturering av objektet till variabler.
val user = User(1, "Alice", "alice@example.com")
val (id, name, email) = user
println("$id: $name ($email)") // “1: Alice (alice@example.com)”
Destrukturering fungerar också i lambdas och for-each-loopar, vilket gör data class bekväm för arbete med samlingar.
Första begränsningen — data class stöder inte arv från en annan data class. Kan endast ärva från vanliga klasser eller gränssnitt.
Andra — automatiska metoder omfattar endast egenskaper från primary constructor. Egenskaper i klasskroppen ignoreras, vilket kan leda till felaktig equals om du glömmer detta.
Tredje — data class kan inte vara open, abstract, sealed eller inner. Den är alltid final.
Fjärde — för samlingar inuti data class utför copy ytlig kopiering. Ändring av element i den kopierade samlingen kommer att påverka originalet.
Enligt Kotlin Best Practices (2026) är data class optimal för DTO, API-modeller, value objects och tillståndsobjekt. För komponenter med affärslogik rekommenderas användning av vanliga klasser.
Vanliga frågor
Nej, en data class kan inte ärva en annan data class. Den kan dock ärva en vanlig klass eller implementera gränssnitt.
Minst en egenskap. Maximalt antal är inte begränsat, men för destrukturering genereras upp till componentN.
Nej, automatiska metoder tar endast hänsyn till egenskaper från primary constructor. Egenskaper från klasskroppen deltar inte i equals, hashCode, toString och copy.
Ja, du kan överskugga equals, hashCode eller toString i kroppen av en data class. I så fall genererar kompilatorn inte sin egen implementering.
En data class genererar automatiskt equals, hashCode, toString, copy och componentN. En vanlig klass tillhandahåller inte dessa metoder utan manuell implementering.
Sammanfattning
Vi utvecklar en mobil applikation nyckelfärdigt
IT Sectr skapar iOS- och Android-applikationer för startups och företag sedan 2017. Vi ger dig råd och föreslår den bästa lösningen.
Läs också