public abstract class EnumSyntax extends Object implements Serializable, Cloneable
public class Bach extends EnumSyntax {
public static final Bach JOHANN_SEBASTIAN = new Bach(0);
public static final Bach WILHELM_FRIEDEMANN = new Bach(1);
public static final Bach CARL_PHILIP_EMMANUEL = new Bach(2);
public static final Bach JOHANN_CHRISTIAN = new Bach(3);
public static final Bach P_D_Q = new Bach(4);
private static final String[] stringTable = {
"Johann Sebastian Bach",
"Wilhelm Friedemann Bach",
"Carl Philip Emmanuel Bach",
"Johann Christian Bach",
"P.D.Q. Bach"
};
protected String[] getStringTable() {
return stringTable;
}
private static final Bach[] enumValueTable = {
JOHANN_SEBASTIAN,
WILHELM_FRIEDEMANN,
CARL_PHILIP_EMMANUEL,
JOHANN_CHRISTIAN,
P_D_Q
};
protected EnumSyntax[] getEnumValueTable() {
return enumValueTable;
}
}
次いで、==および!=演算子を使用するコードを記述して、列挙値を判定できます。次に例を示します。
Bach theComposer;
. . .
if (theComposer == Bach.JOHANN_SEBASTIAN) {
System.out.println ("The greatest composer of all time!");
}
列挙クラスのequals()メソッドは、同一のオブジェクト(==)の判定だけを行います。
列挙値を文字列に変換するには、toString()を呼び出します。文字列は列挙クラスが提供するテーブルから取得されます。
背後にある実装では、列挙値は整数値のみであり、列挙クラス内の列挙値ごとに異なる整数値が割り当てられています。列挙値の整数値を取得するには、getValue()を呼び出します。列挙値の整数値は、列挙値の構築時に設定されます(EnumSyntax(int)を参照)。コンストラクタが保護されているので、使用できる列挙値は列挙クラスで宣言された単体オブジェクトのみです。実行時に新たに列挙値を作成できません。
列挙クラスのサブクラスを定義して、追加の列挙値を持つ列挙クラスを拡張できます。サブクラスの列挙値の整数値は、スーパー・クラスの列挙値の整数値と別個のものである必要はありません。サブクラスがスーパー・クラスと同じ整数値を使用しても、==、!=、equals()、およびtoString()メソッドは正常に動作します。ただし、列挙クラスとサブクラスが使用されるアプリケーションは、スーパー・クラスとサブクラスで異なる整数値を持つ必要があります。
| 修飾子 | コンストラクタと説明 |
|---|---|
protected |
EnumSyntax(int value)
指定された整数値を持つ新しい列挙値を構築します。
|
| 修飾子と型 | メソッドと説明 |
|---|---|
Object |
clone()
列挙値の複製を返します。これは、列挙値のセマンティックスを保護するために、この列挙値と同じオブジェクトになります。
|
protected EnumSyntax[] |
getEnumValueTable()
この列挙値の列挙クラスの列挙値テーブルを返します。
|
protected int |
getOffset()
この列挙値の列挙クラスで使用される最小の整数値を返します。
|
protected String[] |
getStringTable()
この列挙値の列挙クラスの文字列テーブルを返します。
|
int |
getValue()
列挙値の整数値を返します。
|
int |
hashCode()
この列挙値のハッシュ・コード値を返します。
|
protected Object |
readResolve()
オブジェクトの入力時に、この直列化復元された列挙インスタンスを、列挙属性クラスで定義された適切な列挙値に変換します。
|
String |
toString()
この列挙値に対応する文字列値を返します。
|
public int getValue()
public Object clone()
public int hashCode()
hashCode、クラス: ObjectObject.equals(java.lang.Object), System.identityHashCode(java.lang.Object)public String toString()
protected Object readResolve() throws ObjectStreamException
getEnumValueTable()によって返された列挙値テーブルのインデックスi - Lに格納された列挙の単独値。ここで、iはこの列挙値の整数値、LはgetOffset()によって返された値。ObjectStreamException - ストリームが直列化復元できない場合InvalidObjectException - 列挙値のテーブルがnullの場合、この列挙値の整数値が列挙値のテーブルの要素に対応しない場合、または列挙値のテーブルの対応する要素がnullの場合、スローされる。(なお、InvalidObjectExceptionは、readResolve()からスローされると宣言されているObjectStreamExceptionのサブクラスです。)protected String[] getStringTable()
getOffset()によって返された値、Nは文字列テーブルの長さです。インデックスi - Lの文字列テーブルの要素は、整数値がiの列挙値に対するtoString()によって返された値です。上述の範囲の整数値がどの列挙値でも使用されない場合、対応するテーブル要素はnullのままになります。
デフォルト実装はnullを返します。列挙クラス(EnumSyntaxクラスのサブクラス)がnull以外の文字列テーブルを返すためにこのメソッドをオーバーライドしない場合に、このサブクラスがtoString()メソッドをオーバーライドしないと、基底クラスのtoString()メソッドによってこの列挙値の整数値の文字列表現が返されます。
protected EnumSyntax[] getEnumValueTable()
getOffset()によって返された値、Nは列挙値テーブルの長さです。インデックスi - Lの列挙値テーブルの要素は、整数値がiの列挙値オブジェクトです。readResolve()メソッドは、列挙インスタンスの直列化復元時に単独のセマンティックスを保護するためにこれが必要になります。上述の範囲の整数値がどの列挙値でも使用されない場合、対応するテーブル要素はnullのままになります。
デフォルト実装はnullを返します。列挙クラス(EnumSyntaxクラスのサブクラス)がnull以外の列挙値テーブルを返すためにこのメソッドをオーバーライドしない場合に、このサブクラスがreadResolve()メソッドをオーバーライドしないと、基底クラスのreadResolve()メソッドによって、列挙インスタンスがオブジェクト入力ストリームから直列化復元されるときに必ず例外がスローされます。
protected int getOffset()
デフォルトの実装は0を返します。列挙クラス(EnumSyntaxクラスのサブクラス)が0以外で始まる整数値を使用する場合、サブクラスのこのメソッドをオーバーライドします。
バグまたは機能を送信
詳細なAPIリファレンスおよび開発者ドキュメントについては、Java SEのドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright© 1993, 2014, Oracle and/or its affiliates. All rights reserved.