Interfaces ========== KotlinPoet has no trouble with interfaces. Note that interface methods must always be `ABSTRACT`. The modifier is necessary when defining the interface: ```kotlin val helloWorld = TypeSpec.interfaceBuilder("HelloWorld") .addProperty("buzz", String::class) .addFunction( FunSpec.builder("beep") .addModifiers(KModifier.ABSTRACT) .build() ) .build() ``` But these modifiers are omitted when the code is generated. These are the default so we don't need to include them for `kotlinc`'s benefit! ```kotlin interface HelloWorld { val buzz: String fun beep() } ``` Kotlin 1.4 adds support for functional interfaces via `fun interface` syntax. To create this in KotlinPoet, use `TypeSpec.funInterfaceBuilder()`. ```kotlin val helloWorld = TypeSpec.funInterfaceBuilder("HelloWorld") .addFunction( FunSpec.builder("beep") .addModifiers(KModifier.ABSTRACT) .build() ) .build() // Generates... fun interface HelloWorld { fun beep() } ```