定数クラスや使い方、サンプル、java.lang.Enumクラスなど。Javaのenum(列挙型)とは何かについてまとめています。
Javaでは、JDK 5.0からenum(列挙型)が導入されました。
Javaの開発現場では、Constantsクラスなど定数をまとめたクラスを見かけることがあります。 CやC++などの言語では、列挙型というデータ型がありましたが、JDK 5.0以前のJavaでは、この機能はありませんでした。 限定的な定数をプログラムの中で扱いたいと思った場合、プログラマの設計に任されていました。
たとえば、アプリケーションが使用する色の種類を限定するには、int型の定数を宣言し、各定数で特定の値を表すようにします。
public static final int RED = 1; public static final int BLUE = 2; public static final int GREEN = 3;
このように色の値を事前に決めておくのですが、この定数はあくまでもint型の値です。 それらの値を引数にとるメソッドでは引数の型をintとして宣言することになったりします。
実行時に1、2、3以外の値や意図と異なる値が渡される可能性があり、「タイプセーフでない」状態となってしまいます。 それを回避するためには、専用のクラスなどをつくる必要がありますが、予想外のnullポインタ例外など不具合の作り込みの要因も増えます。
そのような問題を解消するため、JDK 5.0から、Javaでもenumという列挙型の機能が導入されました。
enum(列挙型)とは、特定の値のみを持つ型で、プログラマが任意に定義できる型です。 曜日のように自然に列挙される型など、定数の固定セットが必要な場合に使用するデータ型です。
enum(列挙型)を定義するには、enumキーワードを使用して型宣言し、任意の値を列挙します。 構文は次の通りです。
<修飾子> enum 列挙型名 {<値1>,<値2>,<値3>・・・}
enum変数の定義は、次の2つからなります。
なお、enumはクラスとは異なり、enumのコンストラクタを直接呼び出すことは出来ません。 適切な引数によって背後で自動的に呼び出されます。 また、メソッド内では宣言できないので注意が必要です。
以下のサンプルでenum型を試してみます。まずは、enum型のColorsを定義します。
色を表すenum(列挙型)の例です。ファイル名はColors.javaです。
public enum Colors { RED, BLUE, GREEN }
次に、上記のColorsを使用するmainメソッドのあるクラスを定義します。 ファイル名は、EnumTest.javaです。
public class EnumTest { public static void main(String[] args) { System.out.println(Colors.RED); System.out.println(Colors.BLUE); System.out.println(Colors.GREEN); } }
cd <ソースファイルのあるディレクトリのパス>
javac *.java
java EnumTest RED BLUE GREEN
実は、すべてのenum(列挙型)はjava.lang.Enumクラスのサブクラスです。 enum(列挙型)は、java.lang.Enumクラスを継承したfinalクラスで、列挙した値は、public static final指定されたクラス変数の名前となります。 言ってしまえば、クラス定数と同じということになります。
つまり、中身は確認していませんが、以下のようなコードイメージになります。 ※説明が分かりやすくするためのイメージですので注意!です。
final class Colors extends java.lang.Enum<Colors> public static final Colors RED; public static final Colors BLUE; public static final Colors GREEN; public static Colors[] values() {・・・} public static Colors valueOf(java.lang.String) {・・・} static {・・・}
Colorsクラスの場合、RED、BLUE、GREENというpublic static finalの変数に、それぞれColorsオブジェクトが代入されます。 「列挙型名.クラス定数名(列挙した値)」と記述して利用できるようになります。
Enumクラスのサブクラスなので、Enumクラスのメソッドを継承しています。 また、values()とvalueOf()というstaticメソッドが自動で追加されます。
つまり、列挙型の実態は定数やメソッドを持つクラスです。 ただし、明示的にnew演算子でコンストラクタを呼び出して、インスタンス化できないようになっています。 列挙した値を名前とするクラス定数に、列挙型をインスタンス化したオブジェクトが格納されるだけのクラスとなります。
Javaとは?から言語の枠を超えるところまで、Java言語についてまとめています。
スポンサーリンク
サイト内のページ
言語
C・C++
/HTML
/Java
/JavaScript
/PHP
/シェルスクリプト
開発環境
Ant
/Burp
/Eclipse
/Fiddler
/gcc
/gdb
/Git
/g++
/JDK
/JMeter
/JUnit
/Teraterm
/ZAP
技術・仕様
Ajax
/CORBA
/Jakarta EE(旧称J2EE、Java EE)
/JNI
ライブラリ/Framework/CMS
bootstrap
/jQuery
/FuelPHP
/Lucene
/MyBatis
/Seasar2
/Spring
/Struts
/WordPress
Web API
Google Maps
ITインフラOSとミドルウェア
Linux
/Windows
/シェル
ActiveMQ
/Tomcat
/MariaDB
/MySQL
/Nagios
/Redis
/Solr
ITインフラセキュリティ
公開サーバーのセキュリティ
SI
ホームページの作り方
スポンサーリンク
関連サイト内検索ツール
zealseedsおよび関連サイト内のページが検索できます。
IPアドレス確認ツール
あなたのグローバルIPアドレスは以下です。
18.223.206.84
HTMLの表示色確認ツール
パスワード生成ツール
文字数のプルダウンを選択して、取得ボタンを押すと「a~z、A~Z、0~9」の文字を ランダムに組み合わせた文字列が表示されます。
ここに生成されます。
スポンサーリンク
Copyright (C) 2007-2024 zealseeds. All Rights Reserved. Loarding…