data class i Kotlin — vad det är, syntax och funktioner hos dataklasser

Författare: IT Sectr Publicerad: 2026-06-20 Lästid: 10 min

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 — nyckelord för att deklarera en dataklass i Kotlin
  • equals och hashCode — genereras automatiskt baserat på alla egenskaper i primary constructor
  • copy — funktion för ytlig kopiering med möjlighet att ersätta enskilda fält
  • componentN — destrukturering av data class till separata variabler
  • Primary constructor måste innehålla minst en val eller var parameter

Vad är en data class i Kotlin?

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.

Syntax och huvudsakliga funktioner

data class deklareras med nyckelordet data före class. Alla egenskaper som deltar i de automatiska metoderna anges i primary constructor.

kotlin
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.

Egenskaper utanför primary constructor

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.

kotlin
data class Product(
    val id: Int,
    val title: String
) {
    var cachedPrice: Double = 0.0
    // cachedPrice ingår INTE i equals/hashCode/copy
}

Begränsningar för primary constructor

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.

Automatiska metoder equals, hashCode och toString

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.

equals för värdejämförelse

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.

kotlin
data class Address(
    val city: String,
    val street: String
)

val a1 = Address("Moscow", "Tverskaya")
val a2 = Address("Moscow", "Tverskaya")
println(a1 == a2)  // sant

toString för felsökning

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.

Funktionen copy och destrukturering

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.

kotlin
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.

Destrukturering via componentN

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.

kotlin
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.

Begränsningar och rekommendationer

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

Kan en data class ärva en annan data class?

Nej, en data class kan inte ärva en annan data class. Den kan dock ärva en vanlig klass eller implementera gränssnitt.

Hur många egenskaper måste finnas i primary constructor?

Minst en egenskap. Maximalt antal är inte begränsat, men för destrukturering genereras upp till componentN.

Ingår egenskaper från klasskroppen i equals?

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.

Kan automatiska metoder överskuggas manuellt?

Ja, du kan överskugga equals, hashCode eller toString i kroppen av en data class. I så fall genererar kompilatorn inte sin egen implementering.

Vad skiljer en data class från en vanlig klass?

En data class genererar automatiskt equals, hashCode, toString, copy och componentN. En vanlig klass tillhandahåller inte dessa metoder utan manuell implementering.

Sammanfattning

  • data class — syntaktisk konstruktion i Kotlin för datalagring med automatisk metodgenerering
  • equals och hashCode — strukturell jämförelse baserat på primary constructor-egenskaper
  • toString — läsbar objektrepresentation för felsökning och loggning
  • copy — ytlig kopiering med ersättning av enskilda fält via namngivna argument
  • componentN — destrukturering av objekt till variabler för bekväm hantering av samlingar
  • Begränsningar — som standard final, minst en egenskap, inget data->data-arv
  • Användning — DTO, API-modeller, value objects, tillstånd i MVVM

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.

Diskutera projektet

Läs också