Generera Kotlin-källfiler med KotlinPoet
Använd KotlinPoet i en KSP-processor för att generera typsäker Kotlin-kod.
Generera Kotlin-källfiler med KotlinPoet är en gratis lektion i Kotlin Academy på CoddyKit. Detta är lektion 3 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.
Vad är KotlinPoet
KotlinPoet är Squares Kotlin-API för att programmatiskt generera .kt-källfiler. Det producerar välformaterad, idiomatisk Kotlin-kod och integreras naturligt med KSP:s CodeGenerator.
Lägga till beroendet
Lägg till KotlinPoet i processormodulen:
dependencies {
implementation("com.squareup:kotlinpoet:1.17.0")
implementation("com.squareup:kotlinpoet-ksp:1.17.0") // KSP extensions
}FileSpec: roten för en genererad fil
FileSpec.builder(packageName, fileName) är startpunkten. Lägg till typer, funktioner och egenskaper i den och skriv sedan resultatet via KSP:s CodeGenerator:
val file = FileSpec.builder("com.example.generated", "MyFactory")
.addType( /* TypeSpec here */ )
.build()TypeSpec: definiera en klass
Använd TypeSpec.classBuilder() för klasser, objectBuilder() för objekt och interfaceBuilder() för gränssnitt. Kedja anrop till byggaren för att lägga till funktioner, egenskaper och supergränssnitt:
val classSpec = TypeSpec.classBuilder("MyFactory")
.addModifiers(KModifier.PUBLIC)
.addFunction( /* FunSpec */ )
.build()FunSpec: generera en funktion
FunSpec.builder(name) skapar en funktion. Använd addParameter(), returns() och addStatement() för att bygga dess signatur och kropp:
val funSpec = FunSpec.builder("create")
.addParameter("name", String::class)
.returns(String::class)
.addStatement("return "Hello, %L!", name")
.build()PropertySpec: generera en egenskap
Använd PropertySpec.builder(name, type) för att generera egenskaper. Ange KModifier.PRIVATE, KModifier.OVERRIDE eller använd mutable() för var:
val propSpec = PropertySpec.builder("tag", String::class)
.initializer("%S", "MyClass")
.addModifiers(KModifier.PRIVATE)
.build()Formatangivelser för kod
KotlinPoet använder formatangivelser i addStatement() och initializer():
%L– literal (utan citattecken)%S– strängliteral (med citattecken)%T– typnamn (hanterar importer automatiskt)%N– namn (för en spec eller sträng)
Automatiska importer med %T
När Ni använder %T med en ClassName lägger KotlinPoet automatiskt till den import som krävs. Ni behöver aldrig skriva import-satser manuellt:
val listType = ClassName("kotlin.collections", "List")
val funSpec = FunSpec.builder("items")
.returns(listType.parameterizedBy(String::class.asTypeName()))
.addStatement("return emptyList()")
.build()Skriva till KSP:s CodeGenerator
Använd bryggan kotlinpoet-ksp för att skriva den genererade FileSpec via KSP:s CodeGenerator och samtidigt bevara metadata för inkrementella byggen:
file.writeTo(
codeGenerator = codeGenerator,
aggregating = false
)Generera extension-funktioner
Använd FunSpec.builder(name).receiver(type) för att generera extension-funktioner:
val extFun = FunSpec.builder("toJson")
.receiver(ClassName("com.example", "User"))
.returns(String::class)
.addStatement("return Gson().toJson(this)")
.build()Praktiskt användningsfall: fabriksgenerator
En KSP-processor annoterar dataklasser med @AutoFactory och använder KotlinPoet för att generera ett companion-factory-objekt för varje klass. Den genererade filen placeras i samma paket som den ursprungliga klassen.
Testa genererad kod
Använd KotlinPoets FileSpec.toString() i enhetstester för att kontrollera den genererade källkodstexten utan att skriva till disk. Biblioteket kotlin-compile-testing-ksp kan kompilera och köra genererad kod i tester.
Snabbkontroll
Vilken formatangivelse i KotlinPoet lägger automatiskt till den nödvändiga importen för en refererad klass?
Sammanfattning: Generera Kotlin-källfiler med KotlinPoet
Viktiga slutsatser:
FileSpec→ fil på toppnivå;TypeSpec→ klass/objektgränssnitt;FunSpec→ funktion;PropertySpec→ egenskap- Använd
%Tför typreferenser — importer hanteras automatiskt - Skriv med
file.writeTo(codeGenerator)i KSP-processorer - Använd
FileSpec.toString()för att enhetstesta genererade utdata
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 ”Generera Kotlin-källfiler med KotlinPoet” gratis?
Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Kotlin Academy, inklusive ”Generera Kotlin-källfiler med KotlinPoet”, 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 ”Generera Kotlin-källfiler med KotlinPoet”?
Använd KotlinPoet i en KSP-processor för att generera typsäker Kotlin-kod. 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 3 av 4.
Hur lång tid tar lektionen ”Generera Kotlin-källfiler med KotlinPoet”?
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
- KSP kontra KAPT: varför KSP är snabbare
- Skriv er första SymbolProcessor
- Generera Kotlin-källfiler med KotlinPoet
- Integrera KSP-processorer i ett Gradle-bygge