1概要

このチュートリアルでは、Kotlin列挙型について詳しく説明します。

プログラミング言語の進化と共に、enumの使用法と応用も進歩しました。

  • 今日の列挙型定数は単なる定数の集まり** ではありません – それらはプロパティを持ち、インターフェースを実装することができます。

Kotlinの初心者の方は、Kotlinの基本についてのこの記事をチェックしてください –

Kotlin言語の紹介


2基本Kotlin Enums

Kotlinの列挙型の基本を見てみましょう。


2.1. 列挙型の定義

列挙型を、クレジットカードの種類を表す3つの定数を持つものとして定義しましょう。

enum class CardType {
    SILVER, GOLD, PLATINUM
}


2.2. 列挙型定数の初期化

  • KotlinのEnumは、Javaと同じようにコンストラクタを持つことができます** enum定数は

    Enum

    クラスのインスタンスなので、定数はコンストラクタに特定の値を渡すことで初期化できます。

色の値をさまざまな種類のカードに指定しましょう。

enum class CardType(val color: String) {
    SILVER("gray"),
    GOLD("yellow"),
    PLATINUM("black")
}

特定のカードタイプのカラー値にアクセスすることができます。

val color = CardType.SILVER.color


3無名クラスとしての列挙型定数

無名クラスとして作成することで、特定の列挙型定数の動作を定義できます。定数は

Enum

定義内で定義された抽象関数をオーバーライドする必要があります。

たとえば、カードの種類ごとに、異なるキャッシュバック計算があります。

実装方法を見てみましょう。

enum class CardType {
    SILVER {
        override fun calculateCashbackPercent() = 0.25f
    },
    GOLD {
        override fun calculateCashbackPercent() = 0.5f
    },
    PLATINUM {
        override fun calculateCashbackPercent() = 0.75f
    };

    abstract fun calculateCashbackPercent(): Float
}

次のようにして、無名定数クラスのオーバーライドされたメソッドを呼び出すことができます。

val cashbackPercent = CardType.SILVER.calculateCashbackPercent()


4インターフェースを実装する列挙体

さまざまなカードタイプのカード制限を定義する

ICardLimit

インターフェイスがあるとしましょう。

interface ICardLimit {
    fun getCreditLimit(): Int
}

それでは、列挙型がこのインターフェイスをどのように実装できるかを見てみましょう。

enum class CardType : ICardLimit {
    SILVER {
        override fun getCreditLimit() = 100000
    },
    GOLD {
        override fun getCreditLimit() = 200000
    },
    PLATINUM {
        override fun getCreditLimit() = 300000
    }
}

カードタイプのクレジット制限にアクセスするには、前の例と同じ方法を使用できます。

val creditLimit = CardType.PLATINUM.getCreditLimit()


5共通のEnumコンストラクト


5.1. 名前による列挙型定数の取得


String

名でenum定数を取得するには、

valueOf()

static関数を使用します。

val cardType = CardType.valueOf(name.toUpperCase())


5.2. 列挙型定数を繰り返し処理する

すべての列挙型定数を反復処理するには、

values()

static関数を使用します。

for (cardType in CardType.values()) {
    println(cardType.color)
}

5.3. 静的メソッド

列挙型に「静的な」関数を追加するには、

companion object

を使用できます。

companion object {
    fun getCardTypeByName(name: String) = valueOf(name.toUpperCase())
}

これで、この関数を呼び出すことができます。

val cardType = CardType.getCardTypeByName("SILVER")

Kotlinには静的メソッドという概念がないことに注意してください。ここでは、Kotlinの機能を使用して、Javaと同じ機能を取得する方法を示しました。


6. 結論

この記事では、Kotlin言語の列挙型について紹介し、それが重要な機能です。

列挙型の定義や定数の初期化などの簡単な概念をいくつか紹介しました。列挙型定数を匿名クラスとして定義したり、列挙型を実装したインターフェイスなど、高度な機能もいくつか示しました。

これらすべての例とコードスニペットの実装はhttps://github.com/eugenp/tutorials/tree/master/core-kotlin[GitHubプロジェクト]にあります。これはMavenプロジェクトなので、そのままインポートして実行するのは簡単なはずです。