KotlinでのEnumの操作
1. 概要
このチュートリアルでは、Kotlinの列挙型について詳しく説明します。
プログラミング言語の進化に伴い、列挙型の使用法とアプリケーションも進歩しました。
今日の列挙型定数は単なる定数のコレクションではありません–プロパティを持ち、インターフェイスを実装するなど、さまざまなことができます。
Kotlinの初心者は、Kotlinの基本に関するこの記事–Kotlin言語の概要を確認してください。
2. 基本的なKotlin列挙
Kotlinの列挙型の基本を見てみましょう。
2.1. 列挙型の定義
クレジットカードの種類を表す3つの定数を持つ列挙型を定義しましょう。
enum class CardType {
SILVER, GOLD, PLATINUM
}
2.2. 列挙型定数の初期化
Kotlinの列挙型は、Javaの場合と同様に、コンストラクターを持つことができます。列挙型定数は 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. 一般的な列挙型コンストラクト
5.1. 名前による列挙型定数の取得
String 名で列挙型定数を取得するには、 valueOf()静的関数を使用します。
val cardType = CardType.valueOf(name.toUpperCase())
5.2. 列挙型定数の反復
すべての列挙型定数を反復処理するには、 values()静的関数を使用します。
for (cardType in CardType.values()) {
println(cardType.color)
}
5.3. 静的メソッド
列挙型に「静的」関数を追加するには、コンパニオンオブジェクトを使用できます。
companion object {
fun getCardTypeByName(name: String) = valueOf(name.toUpperCase())
}
これで、次のコマンドでこの関数を呼び出すことができます。
val cardType = CardType.getCardTypeByName("SILVER")
Kotlinには静的メソッドの概念がないことに注意してください。 ここでは、Javaと同じ機能を取得する方法を示しましたが、Kotlinの機能を使用しています。
6. 結論
この記事では、Kotlin言語の列挙型とその主な機能を紹介します。
列挙型の定義や定数の初期化など、いくつかの簡単な概念を紹介しました。 また、列挙型定数を匿名クラスとして定義したり、列挙型がインターフェイスを実装したりするなど、いくつかの高度な機能も示しました。
これらすべての例とコードスニペットの実装は、GitHubプロジェクトにあります。 これはMavenプロジェクトなので、そのままインポートして実行するのは簡単です。