xref: /aosp_15_r20/external/kotlinpoet/docs/interfaces.md (revision 3c321d951dd070fb96f8ba59e952ffc3131379a0)
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