xref: /aosp_15_r20/external/kotlinpoet/docs/enums.md (revision 3c321d951dd070fb96f8ba59e952ffc3131379a0)
1Enums
2=====
3
4Use `enumBuilder` to create the enum type, and `addEnumConstant()` for each value:
5
6```kotlin
7val helloWorld = TypeSpec.enumBuilder("Roshambo")
8  .addEnumConstant("ROCK")
9  .addEnumConstant("SCISSORS")
10  .addEnumConstant("PAPER")
11  .build()
12```
13
14To generate this:
15
16```kotlin
17enum class Roshambo {
18  ROCK,
19
20  SCISSORS,
21
22  PAPER
23}
24```
25
26Fancy enums are supported, where the enum values override methods or call a superclass constructor.
27Here's a comprehensive example:
28
29```kotlin
30val helloWorld = TypeSpec.enumBuilder("Roshambo")
31  .primaryConstructor(
32    FunSpec.constructorBuilder()
33      .addParameter("handsign", String::class)
34      .build()
35  )
36  .addEnumConstant(
37    "ROCK", TypeSpec.anonymousClassBuilder()
38      .addSuperclassConstructorParameter("%S", "fist")
39      .addFunction(
40        FunSpec.builder("toString")
41          .addModifiers(KModifier.OVERRIDE)
42          .addStatement("return %S", "avalanche!")
43          .returns(String::class)
44          .build()
45      )
46      .build()
47  )
48  .addEnumConstant(
49    "SCISSORS", TypeSpec.anonymousClassBuilder()
50      .addSuperclassConstructorParameter("%S", "peace")
51      .build()
52  )
53  .addEnumConstant(
54    "PAPER", TypeSpec.anonymousClassBuilder()
55      .addSuperclassConstructorParameter("%S", "flat")
56      .build()
57  )
58  .addProperty(
59    PropertySpec.builder("handsign", String::class, KModifier.PRIVATE)
60      .initializer("handsign")
61      .build()
62  )
63  .build()
64```
65
66Which generates this:
67
68```kotlin
69enum class Roshambo(private val handsign: String) {
70  ROCK("fist") {
71    override fun toString(): String = "avalanche!"
72  },
73
74  SCISSORS("peace"),
75
76  PAPER("flat");
77}
78```
79