Javaコラム Javaエンジニアのためのお役立ちコラム

Java

Javaのenumとは?基本から便利な使い方まで解説

2020年05月19日

SE
Javaのenumとは、どのようなものなのでしょうか?

PM
Javaの定数を一覧のように列挙することでenumと定義されます。

enumとは?


enumとは列挙型と呼ばれるJavaの機能の一つです。プログラム実行中に変更されることのない値を定数と表現できますが、Javaでは定数を一覧のように列挙することでenumとして定義することができます。言葉で説明するだけではわかりにくいと思うので、サンプルプログラムを用意しました。

チームメンバーをイメージしたenumです。3名のメンバーが列挙されています。このプログラムを実行すると標準出力に「YAMADA」と出力されます。Javaのenumは、このようにカンマ区切りで制限なく定数を列挙して宣言することができ、スコープの範囲内であれば自由に呼び出すことができます。

switch文でも型の恩恵を得られる

Javaのenumは以下のサンプルプログラムのようにswitch文に使用することもできます。このプログラムは、実行すると標準出力に「山田」と出力されます。スッキリ書けることはもちろん、Stringとは異なり予めenumとして定義した値のみcaseに書くことができるので、タイプミスなどのヒューマンエラーを防げることが強みです。

各標準メソッドの使い方をチェック

Javaのenumの基底クラスはEnumという抽象クラスです。このクラスには一般的なenumでよく使われるメソッドが標準で用意されています。これらのメソッドは、一見地味ながらも使いどころの多い便利なものです。使い方をチェックしていきましょう。

nameメソッド

nameメソッドはenumの名前をStringで返すメソッドです。下記のサンプルコードなら「YAMADA」と出力されます。このメソッドはあくまでenumの名前を返すメソッドなので、プログラマフレンドリな文字列を返すメソッドとしてはOverrideすることが可能なtoStringを使用しましょう。

ordinalメソッド

ordinalメソッドはそのenumの列挙宣言での位置をintで返します。最初に列挙されたenumの位置は0であることに注意が必要です。宣言の順番に意味があるときに使用できますが、多くの場合、後述するフィールドの設定を用いた方が信頼性の高いコードを書くことができます。このメソッドはEnumSetやEnumMapなどのenumベースのデータ構造を用いるときに使用すると良いでしょう。

compareToメソッド

compareToメソッドは引数に指定されたオブジェクトと比較を行うメソッドです。enumが指定されたオブジェクトよりも小さい場合は負の整数、同じ場合は0、大きい場合は正の整数を返します。この時の大小の比較はenumの宣言の順番をもとに行われます。

valueOfメソッド

valueOfメソッドは引数に指定された名前のenumを返すメソッドです。この後説明するvaluesメソッドと合わせて使用することでenumの名前とenumのマッピングを行うことができます。

valuesメソッド

valuesメソッドは、enumのすべての定数を宣言順に並べた配列を返します。以下のようにenumを宣言した順にループさせることができ、valueOfメソッドの説明で触れたようにenumの名前とenumのマッピングを行うときによく使用されます。

enumもクラス!メンバをフル活用してもっと便利に

一見するとenumはクラスとは別のものに見えるかもしれませんが、先ほども少し触れたとおり、JavaのenumはすべてEnumという抽象クラスを継承したものなのです。つまり、enumもJavaのクラスの1つです。一般的なクラスと同じように、メンバを定義することができます。サンプルプログラムとともに詳しく見ていきましょう。

フィールドやメソッドを定義してみよう

下記のサンプルプログラムでは、今まで扱ってきたTeamMemberにnameというフィールドを定義しています。このようにprivateなコンストラクタを用いてフィールドに値を設定できます。また、一般的なクラスと同じ記法でメソッドを定義することもでき、サンプルプログラムではgetNameメソッドを定義しています。このように、enumにメンバを定義することで、より便利にenumを使うことができます。

SE
enumもJavaのクラスのひとつなのですね。

PM
そうですね。基本的な使い方から徐々にマスターしていきましょう!

enumを積極的に使ってみよう

enumの使い方について理解できたでしょうか。まずは数十以内の定数群をenumとして定義して、標準メソッドだけでも積極的に使ってみましょう。コードの品質が上がることを実感できるはずです。慣れてきて自然にenumのフィールドやメソッドを活用できるようになったなら、enumの使い方はしっかりおさえられたと言えます。ぜひ、チャレンジしてみてください。


Javaでのキャリアアップをお考えの方は、現在募集中の求人情報をご覧ください。

また、直接のエントリーも受け付けております。

エントリー(応募フォーム)

Search

Popular

recommended

Categories

Tags