Kotlinでの列挙型の操作

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。名前による列挙型定数の取得

文字列名で列挙型定数を取得するには、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プロジェクトであるため、そのままインポートして実行するのは簡単です。