この国では犬が

本と芝居とソフトウェア

プログラミング言語Java 第6章 列挙型

きたぜ、enum

 

プログラミング言語によっては、enumは名前付き整数値の集まりに過ぎないですが、プログラミング言語Javaでは、特殊な種類のクラスであり、enumの個々の値を表すインスタンスを持っています。

 

それを待っていた!

 

6.1 簡単なenumの例

Javaenumは一種のクラスなので、enum型の変数には、その型のインスタンスか、nullだけを代入できる。

 

6.2 enum宣言

enumは、拡張することができない。(ですよね!)

enumは、インタフェースを実装することができる。(!!)

 

6.2.1 enum修飾子

 

6.3 enum定数宣言

6.3.1 生成

Javaenumは一種のクラスなので、コンストラクタを設けることで任意の型を列挙することができる。

 

6.3.2 定数固有の振る舞い

定数固有の振る舞いのメソッドを使用することで、網羅しているかの検査をコンパイル時に行っており、そうすることは常に良いことです。

そうすることは常に良いことです!コンパイル時、甘美な響きだ……。

 

そしてこれ、StateパターンとかStrategyパターンとかを簡潔に実装できそうな感じがする。

 

6.4 java.lang.Enum

enumは複製できない。enumの同値性と同一性は同じ。enumはComparableであり、compareToメソッドにおいて、宣言された順に大きくなる。

enumには、他にもいくつかの便利なメソッドが備わっている。

enumには、EnumSetとEnumMapという、「非常に効率的なenum固有の2つのコレクションクラス」がある。

 

6.5 enumを使用すべきか否か

ここまででenum最高や!の感が著しく高まったところへ、ドバドバ水を差す。

結局のとこenumは(ほぼ)意味を乗せたクラスの簡易バージョンにすぎないので、複雑なことをやろうとしているなら本当にenumである必要があるのか(enumで用が足りるのか)入念な考慮が必要だ……。

 

でも最後にデレる。

 

サブクラス化を通しての特化が必要でなければ、独自のクラスを定義するよりは、enum型を使用するのが、大抵の場合には良いです。

 

これには胸キュンを禁じ得ないぜ、ゴスリン氏(ほか2名)……。

 

それにしても、Javaってやっぱ、一にサブクラス化、二にサブクラス化、三四がなくて五にサブクラス化だなって印象が、ここまでのところあります。