Classes enum Kotlin
L'utilisation la plus élémentaire d'une classe enum consiste à implémenter une énumération de type sûr.
Les constantes enum sont séparées par des virgules, et chaque constante enum est un objet.
enum class Color{
RED,BLACK,BLUE,GREEN,WHITE
}
Initialisation d'énumération
Chaque enum est une instance de sa classe enum, et ils peuvent être initialisés :
enum class Color(val rgb: Int) {
RED(0xFF0000),
GREEN(0x00FF00),
BLUE(0x0000FF)
}
Par défaut, le nom est le nom de la constante enum, et la valeur commence à 0. Si vous devez spécifier une valeur, vous pouvez utiliser son constructeur :
enum class Shape(value:Int){
ovel(100),
rectangle(200)
}
Les enums prennent également en charge la déclaration de leurs propres classes anonymes avec les méthodes correspondantes, ainsi que la redéfinition des méthodes de la classe de base. Par exemple :
enum class ProtocolState {
WAITING {
override fun signal() = TALKING
},
TALKING {
override fun signal() = WAITING
};
abstract fun signal(): ProtocolState
}
Si la classe enum définit des membres, vous devez séparer les définitions des constantes enum des définitions des membres par un point-virgule.
Utilisation des constantes enum
Les classes enum en Kotlin disposent de méthodes synthétiques qui vous permettent d'itérer sur les constantes enum définies et d'obtenir une constante enum par son nom.
EnumClass.valueOf(value: String): EnumClass // 转换指定 name 为枚举值,若未匹配成功,会抛出IllegalArgumentException EnumClass.values(): Array<EnumClass> // 以数组的形式,返回枚举值
Obtention d'informations relatives aux enum :
val name: String //获取枚举名称 val ordinal: Int //获取枚举值在所有枚举数组中定义的顺序
Exemple
enum class Color{
RED,BLACK,BLUE,GREEN,WHITE
}
fun main(args: Array<String>) {
var color:Color=Color.BLUE
println(Color.values())
println(Color.valueOf("RED"))
println(color.name)
println(color.ordinal)
}
Depuis Kotlin 1.1, vous pouvez utiliserenumValues<T>()etenumValueOf<T>()des fonctions pour accéder aux constantes d'une classe enum de manière générique :
enum class RGB { RED, GREEN, BLUE }
inline fun <reified T : Enum<T>> printAllValues() {
print(enumValues<T>().joinToString { it.name })
}
fun main(args: Array<String>) {
printAllValues<RGB>() // 输出 RED, GREEN, BLUE
}
Autres extensions