Come indicato in altre risposte, è possibile fare riferimento a qualsiasi valore dello enum
esistente per nome, ma non costruirne uno nuovo. Ciò non impedisce di fare qualcosa di simile a quello che stavi cercando ...
// 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)
Se mancavano per trovare l'istanza del enum
sulla base del valore numerico 32
allora si potrebbe eseguire la scansione dei valori in il seguente modo. Creare il enum
con un companion object
e una funzione 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 }
}
}
quindi chiamare la funzione per ottenere una corrispondenza istanza esistente:
val bits = BitCount.from(32) // results in BitCount.x32
bella e abbastanza. In alternativa, in questo caso è possibile creare il nome del valore enum
dal numero poiché si ha una relazione prevedibile tra i due, quindi utilizzare BitCount.valueOf()
. Ecco la nuova funzione from()
all'interno dell'oggetto associato.
fun from(findValue: Int): BitCount = BitCount.valueOf("x$findValue")
fonte
2016-01-06 03:31:58
BTW, non è necessario utilizzare la sintassi completa del costruttore per casi semplici, quindi la parola 'costruttore 'è ridondante. Può essere fatto solo con 'public enum class BitCount (..)' – voddan
Se vuoi ancora creare un'istanza dell'Enum dato il valore numerico, puoi (ma è più "trova l'istanza data un valore numerico") : http://stackoverflow.com/a/34625163/3679676 –
per i nuovi arrivati. leggi questo tutorial sull'enumerazione di Kotlin. http://developine.com/enum-classes-in-kotlin-example/ –