【Java】enum(列挙型)とは?使い方をサンプルコードで徹底解説!

enumはあるデータの種類を表すのに使い、列挙型とも呼ばれています。
enumは特殊なクラスで、そのクラスはObject型のサブクラスであるように、すべての「enum」は、あるデータの Enum型のサブクラスになります。

また、enumはswitch文と組み合わせることで、コードが読みやすく、スマートになります。
また、意図のない数値を渡される可能性がなくなりますのでenumはぜひ覚えておきましょう。

今回は
enumとは
enumを使った場合
enumを使わなかった場合
アクセス指定子を使った場合
について解説していきます。

enumとは

enumとは、列挙型とも呼ばれており、複数の定数をひとつにまとめておくことができる型のことです。

enumの書き方

enumの構文は下記となります。

列挙子にデータを追加し、enum名を定義することで複数のデータをまとめて管理することができます。

enum値の比較

enum型の変数はインスタンスであるにもかかわらず、「switch」文内での分岐に使うことができます。
「==」演算子での比較も可能です。
普通のインスタンスでもあるので、equals()メソッドやcompareTo()メソッドによる比較も可能になっています。

enumを使用する場合と使用しない場合のサンプルコード

イenumを使用する場合と使用しない場合のサンプルコードを見て比較してみましょう。

enumを使った場合

enumを使った場合のコードを見てみましょう。

SignalStatus.java

Main.java

出力結果

青になりました

サンプルコードでは、enum型を宣言しています。
「STOP」「GO」「CAUTIONIの3つが定義されています。

print()メソッドでパラメータを受け取って、「switch文を使って処理を分岐しています。
SignalStatus型を使うと、必ず「SingalStatus.STOP」、「SignalStatus.GO」、「SignalStatus.CAUTION」のいずれかが渡されます。

また、「switch」文のカッコの中の変数はSignalStatus型であることがわかっているので、caseの部分に「SignalStatus.」と記述する必要がありません(記述するとコンパイルエラーになります)。
enum型もオブジェクトなので、「null が渡される場合があるので注意してください。
たとえば、 print()メソッドで「null」が渡されると、「NullPointerException」例外が発生します。

enumを使わなかった場合

enumを使わなかった場合のコードを見てみましょう。

Main.java

Signal.java

出力結果

青になりました

一見するとenumを使用した場合と変わりませんが、print()メソッドのパラメータはint型なので意図のない数値を渡される可能性があり、それを防ぐためにenumが使われます。

アクセス指定子を使ったサンプルコード

アクセス指定子は、「public」のみ使用でき、省略も可能です。
そして、継承をすることはできませんが、インタフェースの実装は可能で、メソッドを実装することもできます。

先ほどのサンプルコードをアクセス指定子を使うと下記のようになります。

Main.java

SignalStatus.java

出力結果

青になりました

Writer

ST

株式会社flyhawkのSTです。フライテックメディア事業部でのメディア運営・ライター業務なども担当。愛機はMac Book AirとThinkPad。好きな言語:swift、JS系(Node.js等)。好きなサーバー:AWS。受託開発やプログラミングスクールの運営をしております。ご気軽にお問い合わせください。

最新の案件情報