Как указано в других ответах, вы можете ссылаться на любое значение enum
, которое существует по имени, но не создает новый. Это не мешает вам делать что-то подобное тому, что вы пытаетесь ...
// 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)
Если вы желая найти экземпляр enum
на основе числового значения 32
, то вы можете сканировать значение следующим образом. Создание enum
с companion object
и 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 }
}
}
Затем вызовите функцию, чтобы получить соответствующий существующий экземпляр:
val bits = BitCount.from(32) // results in BitCount.x32
Приятный и довольно. В качестве альтернативы в этом случае вы можете создать имя значения enum
из числа, поскольку у вас есть предсказуемая связь между ними, затем используйте BitCount.valueOf()
. Вот новая функция from()
внутри объекта-компаньона.
fun from(findValue: Int): BitCount = BitCount.valueOf("x$findValue")
Кстати, вам не нужно использовать полный синтаксис конструктора для простых случаев, поэтому слово 'constructor' является избыточным. Это может быть сделано только с помощью 'public enum class BitCount (..)' – voddan
Если вы все еще хотите создать экземпляр Enum с заданным числовым значением, вы можете (но больше «найти экземпляр с заданным числовым значением») : http://stackoverflow.com/a/34625163/3679676 –
для новых гостей. прочитайте этот учебник по перечислениям в Котлине. http://developine.com/enum-classes-in-kotlin-example/ –