Kotlin で列挙型の変数を宣言するにはどうすればよいですか? 質問する

Kotlin で列挙型の変数を宣言するにはどうすればよいですか? 質問する

続くドキュメント列挙クラスを作成しました:

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

次に、ある関数で変数を宣言しようとします。

val bitCount : BitCount = BitCount(32)

しかし、コンパイル エラーが発生します。

エラー:(18, 29) Kotlin: 列挙型をインスタンス化できません

BitCount 型の変数を宣言し、 から初期化するにはどうすればいいですかInt?

ベストアンサー1

他の回答で述べられているように、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、次の方法で値をスキャンできます。 と 関数を使用して を作成enumcompanion 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素敵ですね。あるいは、この場合は、2 つの関係が予測可能なので、数値から値の名前を作成し、 を使用することもできます。以下は、コンパニオン オブジェクト内のBitCount.valueOf()新しい関数です。from()

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

おすすめ記事