【Java入門】Enum(列挙型)の使い方総まとめ

こんにちは!フリーランスのオータケです。皆さんはJavaEnumを使っていますか?そしてEnum(列挙型)を使いこなせていますか?

Enumには定数を定義して使うだけでなく、フィールドを定義したりメソッドを定義して使うことができます!

この記事では、Enumについて

  • Enumについて
  • Enumのメソッドの使い方

という基本的な内容から、Enumクラスの使い方などの応用的な使い方に関しても解説していきます。今回はEnumについて、わかりやすく解説します!

Enumについて

Enum(列挙型)とは、複数の定数をひとつにまとめておくことができる型のことです。Enumで定義する定数のことを列挙子と呼びます。

C言語でも列挙型は使われ、定義の方法は似ている部分がありますが、Javaの列挙型はクラスですので、フィールドやメソッドを定義することができます。

switch文で列挙子を使用することで、読みやすさ(可読性)が向上することなどがEnumを使うメリットになります。

定義について

Enumの定義は以下のように記述します。

サンプルコードで確認しましょう。

実行結果:

このサンプルコードでは、列挙型のFruitを定義しています。Fruitを使用するには普通のクラスと同じようにオブジェクトを宣言します。ここではfruit_typeを宣言しています。

宣言したオブジェクトにEnumの列挙子を格納して、オブジェクトを使用することができるようになります。

switch文での使い方

Java6以前の環境では、switch文でString型を指定できなかったので、enumを使って記述を工夫する必要がありました。Java7からは指定できるようになりましたので、記述が簡潔になりました。

サンプルコードで確認しましょう。

実行結果:

Enumのメソッドの使い方

Enumにはメソッドも用意されています。メソッドの使い方についてもみていきましょう。

valueOfメソッド

valueOfメソッドは引数で指定した文字列から列挙子名を取得する場合に使用します。サンプルコードで確認しましょう。

実行結果:

下の記事ではこのvalueOfメソッドの使い方や用途をわかりやすく解説しています!

【Java】enumでvalueOfメソッドの意味と使い方をわかりやすく解説!
更新日 : 2017年6月25日

valuesメソッド

valuesメソッド全ての列挙子を返します。

実行結果:

valuesメソッドの使い方をわかりやすく解説したものがこちら記事です!

【5分で解決】Javaのvalues(Enumクラス)をわかりやすく解説!
更新日 : 2017年6月7日

Enumクラスの使い方

JavaのEnumはクラスです。クラスですので、フィールドやメソッドを定義することができます。フィールドやメソッドを定義する方法についてみていきましょう。

フィールド変数とコンストラクタの定義

C言語の列挙型は初期値(整数値)を与えることができました。

Javaの列挙型はクラスなので、C言語のように初期値を与えることはできません。Javaの列挙型はクラスでフィールドやコンストラクタも定義することができるので、コンストラクタを使って初期値を設定することができます。

初期値には数値はもちろん文字列も設定することが可能です。

数値の値を定義する場合

初期値に数値を設定する場合についてみていきましょう。

このサンプルコードのように、int型のフィールドidを定義し列挙子の後に「( )」で囲って値を定義することができます。

なお、コンストラクタのアクセス修飾子はprivateのみ使用可能です。コンストラクタの処理を記述しない場合はエラーが発生しますので注意が必要です。コンストラクタの記述は値を保持するために必要なものだと考えて下さい。

文字列の値を定義する場合

初期値に文字列を定義することも可能です。

メソッドの定義について

次に、メソッドの定義についてみていきましょう。定義したフィールドの値を取得する例をみてみましょう。

実行結果:

このサンプルコードでは、列挙子の値を取得するためにメソッドgetValueを定義しています。

また、Enumクラスにあらかじめ用意されているordinalメソッドとnameメソッドを使っています。ordinalメソッドは列挙子の順番を取得し、nameメソッドは列挙子名を取得します。

なお、Java6以前の環境ではswitch文でString型を指定できなかったので、enumを使って記述を工夫する必要があると前述しています。この場合にも、メソッドを定義する必要があります。

詳しい内容については、こちらを参考にしてくださいね。

【8分でわかる】Enumクラスで文字列を使った比較・変換テクニックをわかりやすく解説!
更新日 : 2017年6月7日

Enumクラスの注意点

Enumクラスを使用する際の注意点をおさらいしておきます。

  • Enumクラスの列挙子には値を付与することができますが、その場合はフィールドとコンストラクタを定義する必要があります。
  • Enumクラスのコンストラクタのアクセス修飾子はprivateのみ許されます。
  • Enumクラスは別のクラスを継承することはできませんが、インターフェースを実装することはできます。

まとめ

いかがでしたか?

Enumは列挙型と呼ばれるクラスであることがわかりました。Javaの列挙型では単なる列挙子のあつまりというわけではなく、独自の機能が追加できる特別なクラスであることも学びました。

そしてvalueOfやvaluesメソッドを使うことにより、自分の開発状況にあった便利な処理が書けることも学びました。もしEnumについて使い方を忘れた場合は、ぜひこの記事を思い出して下さい!

Javaカリキュラム無料公開中!

この記事はJava入門完全攻略ガイド【基礎学習/アプリ開発/仕事獲得】の一部になります。このカリキュラムは、プログラミング入門者が、基礎学習からアプリ開発、さらには仕事獲得まで体系的に学べる内容となっています。

Java学習に必要な情報を一つにまとめていますので効率よくJavaを学ぶことが出来ます。この機会に是非活用していただければと思います。

Java入門からアプリ開発まで未経験者が知っておくべき基礎を総ざらい
更新日 : 2019年5月22日

最短でJavaを習得したい方へ

もし、あなたが、

「難しすぎて学習が全然進まない」
「学習量が膨大でゴールが見えない」
「エラーを解決するのに何日もかかってしまう」

など、プログラミング学習やキャリアに関してお困りであれば、まずは『無料体験レッスン』にお申し込み下さい。

あなたにとって、最適の解決策をご提案させていただきます。

詳しくは下の画像から詳しいサービス内容をご確認ください。

cta_bannar-java2
LINEで送る
Pocket

書いた人

オータケ

オータケ

30歳、フリーランスプログラマ。中学の頃よりプログラミングに興味を持ちゲーム開発やWebサイト構築などを経験
新しいフレームワークやライブラリに興味があり革新的な機能が含まれていると泣いて喜ぶ。

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説