Primärkonstruktor och egenskapsparametrar
Deklarera klasser med primärkonstruktorer och egenskaper direkt i deklarationen.
Primärkonstruktor och egenskapsparametrar är en gratis lektion i Kotlin Academy på CoddyKit. Detta är lektion 1 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för Kotlin Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Kotlin Academy innehåller totalt 4 lektioner.
Den primära konstruktorn
En Kotlin-klass deklarerar sin primära konstruktor direkt efter klassnamnet inom parenteser. Ingen metodkropp – bara en parameterlista.
Enklaste klassen
Den primära konstruktorn utan modifierare är osynlig efter klassnamnet.
class Greeter(val name: String) {
fun greet() = "Hello, $name!"
}
fun main() {
println(Greeter("Ada").greet())
}Egenskapsparametrar
Sätt val eller var före en konstruktorparameter för att skapa en klassegenskap i ett enda steg.
class Person(val name: String, var age: Int)
fun main() {
val p = Person("Bob", 30)
println("${p.name} is ${p.age}")
p.age = 31
println("Now ${p.age}")
}Parametrar utan val/var
Konstruktorparametrar utan val/var är lokala för konstruktorn. De kan användas i init-block eller egenskapsinitierare, men inte nås senare.
class Logger(prefix: String) {
val msg = "$prefix: ready"
}
fun main() {
val l = Logger("[INFO]")
println(l.msg)
// l.prefix // ERROR — not a property
}Standardvärden för parametrar
Ange standardvärden för konstruktorparametrar för att undvika överflödig kod för överlagringar.
class User(
val name: String,
val age: Int = 0,
val email: String = ""
)
fun main() {
println(User("Ana").age) // 0
println(User("Ben", 25).email) // ""
println(User("Cal", 30, "c@x.io").email)
}Namngivna argument
Hoppa över den positionella ordningen och namnge parametrarna vid anropet – särskilt användbart tillsammans med standardvärden.
class HttpClient(
val baseUrl: String,
val timeoutMs: Int = 5000,
val retries: Int = 3
)
fun main() {
val c = HttpClient(
baseUrl = "https://api.example.com",
retries = 5
)
println("retries=${c.retries} timeout=${c.timeoutMs}")
}Synlighet för konstruktor
Använd private constructor för att förhindra att klassen instansieras externt – vanligt i kombination med factory-metoder.
class Singleton private constructor() {
companion object {
val instance = Singleton()
}
}
fun main() {
val s = Singleton.instance
println(s)
}Sekundära konstruktorer
Lägg till ytterligare konstruktorer med nyckelordet constructor. De måste delegera till den primära konstruktorn med this(...).
class Point(val x: Int, val y: Int) {
constructor(value: Int) : this(value, value)
}
fun main() {
println("${Point(3).x}, ${Point(3).y}") // 3, 3
}Konstruktor med synlighet
Du kan blanda olika synlighetsnivåer för konstruktorer – användbart i bibliotek.
class Lib internal constructor(val key: String) {
companion object {
fun create(key: String) = Lib(key)
}
}
fun main() {
println(Lib.create("abc").key)
}Sammanfattning av init-block
Kod som ska köras under konstruktionen placeras i ett init { }-block. Flera init-block körs i källkodens ordning.
class Validator(val value: String) {
init { require(value.isNotBlank()) { "value cannot be blank" } }
}
fun main() {
println(Validator("ok").value)
// Validator("") // throws IllegalArgumentException
}Kombinera egenskaper och logik
Egenskapsdeklarationer, sekundära konstruktorer och init-block kan kombineras till en flexibel initieringspipeline.
class Account(
val owner: String,
initialBalance: Double = 0.0
) {
var balance: Double = initialBalance
private set
init {
require(initialBalance >= 0) { "balance must be non-negative" }
}
fun deposit(amount: Double) { balance += amount }
}
fun main() {
val a = Account("Alice", 100.0)
a.deposit(50.0)
println("${a.owner}: ${a.balance}") // Alice: 150.0
}Snabbkontroll
Vad gör nyckelordet val när det används i en parameter i den primära konstruktorn?
Sammanfattning
Den primära konstruktorn finns i klasshuvudet. Använd val/var för egenskapsparametrar; nakna parametrar är lokala för konstruktorn. Lägg till standardvärden för att minska antalet överlagringar och kör initieringslogik i init-block. Sekundära konstruktorer delegerar via this(...).
Lär dig Kotlin med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 51
- Lektioner
- 203
Vanliga frågor
Är lektionen ”Primärkonstruktor och egenskapsparametrar” gratis?
Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Kotlin Academy, inklusive ”Primärkonstruktor och egenskapsparametrar”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i Kotlin Academy innehåller totalt 4 lektioner.
Vad lär jag mig i ”Primärkonstruktor och egenskapsparametrar”?
Deklarera klasser med primärkonstruktorer och egenskaper direkt i deklarationen. Ni övar på Kotlin Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig Kotlin Academy?
Du behöver inga förkunskaper. Utbildningen i Kotlin Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 1 av 4.
Hur lång tid tar lektionen ”Primärkonstruktor och egenskapsparametrar”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här Kotlin Academy-lektionen?
Ja. Varje Kotlin Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.
Alla lektioner i den här kursen
- Primärkonstruktor och egenskapsparametrar
- init-block och initieringsordning
- Egna getters och setters med field
- lateinit och fördröjd initiering