when strings example enum classes enums kotlin

enums - strings - object kotlin java



¿Cómo declaro una variable de tipo enum en Kotlin? (3)

Como se indica en otras respuestas, puede hacer referencia a cualquier valor de la enum que exista por nombre, pero no construir uno nuevo. Eso no te impide hacer algo similar a lo que estabas intentando ...

// wrong, it is a sealed hierarchy, you cannot create random instances val bitCount : BitCount = BitCount(32) // correct (assuming you add the code below) val bitCount = BitCount.from(32)

Si deseaba encontrar la instancia de la enum basada en el valor numérico 32 , podría escanear los valores de la siguiente manera. Cree la enum con un companion object y una función from() :

enum class BitCount(val value : Int) { x16(16), x32(32), x64(64); companion object { fun from(findValue: Int): BitCount = BitCount.values().first { it.value == findValue } } }

Luego llame a la función para obtener una instancia existente coincidente:

val bits = BitCount.from(32) // results in BitCount.x32

Agradable y bonita Alternativamente, en este caso, puede crear el nombre del valor de enum partir del número, ya que tiene una relación predecible entre los dos y luego usar BitCount.valueOf() . Aquí está la nueva función from() dentro del objeto compañero.

fun from(findValue: Int): BitCount = BitCount.valueOf("x$findValue")

De acuerdo con la documentation una clase enum creada.

enum class BitCount public constructor(val value : Int) { x32(32), x64(64) }

Entonces estoy tratando de declarar una variable en alguna función

val bitCount : BitCount = BitCount(32)

pero hay un error de compilación

¿Cómo declaro una variable de tipo BitCount y la inicializo desde Int ?

Error: (18, 29) Kotlin: los tipos de enumeración no se pueden crear instancias


Las instancias de enumeración podrían declararse solo dentro de la declaración de clase de enum.

Si desea crear un nuevo BitCount, simplemente agréguelo como se muestra a continuación:

enum class BitCount public constructor(val value : Int) { x16(16), x32(32), x64(64) }

y usar en todas partes como BitCount.x16 .


Qué pasa:

enum class BitCount constructor(val value : Int) { x32(32), x64(64); companion object { operator fun invoke(rawValue: Int) = BitCount.values().find { it.rawValue == rawValue } } }

Entonces puedes usarlo como propusiste:

val bitCount = BitCount(32)

Y devolverá nulo si no se encuentra el valor en los casos de enumeración