Kotlin Academy · Lektion

Generera Kotlin-källfiler med KotlinPoet

Använd KotlinPoet i en KSP-processor för att generera typsäker Kotlin-kod.

Lektion 3 av 414 steg

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 %T för typreferenser — importer hanteras automatiskt
  • Skriv med file.writeTo(codeGenerator) i KSP-processorer
  • Använd FileSpec.toString() för att enhetstesta genererade utdata
Gratis att börja

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

  1. KSP kontra KAPT: varför KSP är snabbare
  2. Skriv er första SymbolProcessor
  3. Generera Kotlin-källfiler med KotlinPoet
  4. Integrera KSP-processorer i ett Gradle-bygge
← Tillbaka till Kotlin Academy