Let’s have a look at enums in kotlin. Unlike Java, where enum is a Type; in Kotlin, enums are classes
Defining an enum#
enum class Direction {
NORTH, SOUTH, WEST, EAST
}Defining an enum with a variable#
enum class Direction(val shortName: Char) {
NORTH('N'), SOUTH('S'), WEST('W'), EAST('E')
}Template Method pattern in Enum#
enum class Direction(val shortName: Char) {
NORTH('N') {
override fun move() = "Moving in North Direction"
},
SOUTH('S') {
override fun move() = "Moving in South Direction"
},
WEST('W'){
override fun move() = "Moving in West Direction"
},
EAST('E'){
override fun move() = "Moving in East Direction"
};
abstract fun move(): String
}Companion methods in enum#
enum class Direction(val shortName: String) {
NORTH("N"), SOUTH("S"), WEST("W"), EAST("E");
companion object {
fun valueOfIgnoreCase(name: String) = valueOf(name.uppercase(Locale.getDefault()))
fun valueOfShortName(shortName: String): Direction? = Direction.values().find { it.shortName == shortName }
}
}