1*3c321d95SSadaf EbrahimiInterfaces 2*3c321d95SSadaf Ebrahimi========== 3*3c321d95SSadaf Ebrahimi 4*3c321d95SSadaf EbrahimiKotlinPoet has no trouble with interfaces. Note that interface methods must always be `ABSTRACT`. 5*3c321d95SSadaf EbrahimiThe modifier is necessary when defining the interface: 6*3c321d95SSadaf Ebrahimi 7*3c321d95SSadaf Ebrahimi```kotlin 8*3c321d95SSadaf Ebrahimival helloWorld = TypeSpec.interfaceBuilder("HelloWorld") 9*3c321d95SSadaf Ebrahimi .addProperty("buzz", String::class) 10*3c321d95SSadaf Ebrahimi .addFunction( 11*3c321d95SSadaf Ebrahimi FunSpec.builder("beep") 12*3c321d95SSadaf Ebrahimi .addModifiers(KModifier.ABSTRACT) 13*3c321d95SSadaf Ebrahimi .build() 14*3c321d95SSadaf Ebrahimi ) 15*3c321d95SSadaf Ebrahimi .build() 16*3c321d95SSadaf Ebrahimi``` 17*3c321d95SSadaf Ebrahimi 18*3c321d95SSadaf EbrahimiBut these modifiers are omitted when the code is generated. These are the default so we don't need 19*3c321d95SSadaf Ebrahimito include them for `kotlinc`'s benefit! 20*3c321d95SSadaf Ebrahimi 21*3c321d95SSadaf Ebrahimi```kotlin 22*3c321d95SSadaf Ebrahimiinterface HelloWorld { 23*3c321d95SSadaf Ebrahimi val buzz: String 24*3c321d95SSadaf Ebrahimi 25*3c321d95SSadaf Ebrahimi fun beep() 26*3c321d95SSadaf Ebrahimi} 27*3c321d95SSadaf Ebrahimi``` 28*3c321d95SSadaf Ebrahimi 29*3c321d95SSadaf EbrahimiKotlin 1.4 adds support for functional interfaces via `fun interface` syntax. To create this in 30*3c321d95SSadaf EbrahimiKotlinPoet, use `TypeSpec.funInterfaceBuilder()`. 31*3c321d95SSadaf Ebrahimi 32*3c321d95SSadaf Ebrahimi```kotlin 33*3c321d95SSadaf Ebrahimival helloWorld = TypeSpec.funInterfaceBuilder("HelloWorld") 34*3c321d95SSadaf Ebrahimi .addFunction( 35*3c321d95SSadaf Ebrahimi FunSpec.builder("beep") 36*3c321d95SSadaf Ebrahimi .addModifiers(KModifier.ABSTRACT) 37*3c321d95SSadaf Ebrahimi .build() 38*3c321d95SSadaf Ebrahimi ) 39*3c321d95SSadaf Ebrahimi .build() 40*3c321d95SSadaf Ebrahimi 41*3c321d95SSadaf Ebrahimi// Generates... 42*3c321d95SSadaf Ebrahimifun interface HelloWorld { 43*3c321d95SSadaf Ebrahimi fun beep() 44*3c321d95SSadaf Ebrahimi} 45*3c321d95SSadaf Ebrahimi``` 46