Javaエニュメレーションの種類のenumの詳しい解と使用
Javaエニュメレーションの種類のenumの詳しい解と使用
最近同僚と問題を討論する時、突然同僚は私達がどうしてJavaの中で定義する定数値がenmuの列挙のタイプを採用しないことを言及して、public final staticのタイプを採用して定義に来ますか?以前は私達はこのような方式で定義していましたが、enumの定義はあまり採用されていませんので、注意したことがありません。突入した問題に対しては、なぜこのような定義があるのかよく分かりません。分かりませんでしたから、時間を作って検討してみましょう。
Javaのエニュメレーションの種類はキーワードenumで定義されています。jdk 1.5からしかない新しいタイプです。すべてのエニュメレーションの種類はエムから継承されています。列挙の種類を理解するには、jdkのEnum類を開いて簡単に読むことをお勧めします。このクラスには多くのprotected方法が定義されています。例えば、コンストラクションなど、これらの方法を使うなら、列挙の種類を現在のクラスに定義できます。各列挙の種類には、自分の名前と順番があります。列挙の種類を出力すると、列挙の種類のnameが入力されます。具体的には次の例を参考にしてください。
一、 一般的に定数を定義する方法
私たちは通常public final staticを利用して定義しています。コードは以下の通りです。それぞれ1で赤信号を表し、3は緑信号を表し、2は黄色灯を表します。
列挙の種類の簡単な定義方法は以下の通りです。列挙の種類ごとの値を定義することはできないようです。例えば、赤信号と青信号と黄色灯を定義するコードは以下の通りかもしれません。
列挙の種類の完全なデモコードは以下の通りです。
以下の内容はつまらないかもしれませんが、絶対に見る価値があります。
1. コード:
まず、安全なタイプではありません。あなたは必ずintであることを確認してください。
その次に、あなたはまだその範囲が0と1であることを確認します。
最後に、多くの時にあなたがプリントアウトした時、あなたは1と0しか見えません。
コードを見ていない人はあなたの意図を知らないです。古いpublic static finalの量を全部捨ててください。
2. エンム類を作って、普通の種類と見なしてもいいです。それ以外は他のクラスを引き継ぐことができません。javaは単一継承であり、Enumを継承しました。
他の方法を追加して、それ自体をカバーする方法があります。
3. switch()パラメータはenumを使用できます。
4. values()方法はコンパイラをenum定義に挿入するstatic方法です。だから、enumのインスタンスを上に父の種類のEumに変換する時は、values()はアクセスできません。解決方法:クラスの中に一つのget Enum Contents()の方法があります。だから、Enumインターフェースの中にvalues()の方法がなくても、私達は依然としてクラスの対象を通じてすべてのenumの実例を取得できます。
5. enumからサブクラスを継承できませんでした。enumの中の要素を拡張する必要があれば、インターフェースの内部に、このインターフェースを実現するための列挙を作成し、要素をグループ化します。エニュメレート・エレメントをグループ化するに至ります。
6. エンマセットをマークの代わりに使います。エンムはメンバーに唯一の要求をしますが、エンムから添加元素を削除することはできません。
7. EnumMapのkeyはenumで、valueは他のObjectの対象です。
8. enumはプログラマがeunmの実例のために方法を編纂することを許可します。したがって、各enumのインスタンスには、それぞれ異なる行動を与えることができる。
9. エンムの職責チェーンを使用して、これは設計モードの職責チェーンパターンに関係します。さまざまな方法で一つの問題を解決します。そして彼らをリンクします。要求が到来すると、このチェーンを巡回し、チェーンの中のある解決策が要求を処理することができるまで。
10. enumを使った状態機
11. enumを使って多重に分けます。
読んでくれてありがとうございます。みなさんのご協力をお願いします。ありがとうございます。
最近同僚と問題を討論する時、突然同僚は私達がどうしてJavaの中で定義する定数値がenmuの列挙のタイプを採用しないことを言及して、public final staticのタイプを採用して定義に来ますか?以前は私達はこのような方式で定義していましたが、enumの定義はあまり採用されていませんので、注意したことがありません。突入した問題に対しては、なぜこのような定義があるのかよく分かりません。分かりませんでしたから、時間を作って検討してみましょう。
Javaのエニュメレーションの種類はキーワードenumで定義されています。jdk 1.5からしかない新しいタイプです。すべてのエニュメレーションの種類はエムから継承されています。列挙の種類を理解するには、jdkのEnum類を開いて簡単に読むことをお勧めします。このクラスには多くのprotected方法が定義されています。例えば、コンストラクションなど、これらの方法を使うなら、列挙の種類を現在のクラスに定義できます。各列挙の種類には、自分の名前と順番があります。列挙の種類を出力すると、列挙の種類のnameが入力されます。具体的には次の例を参考にしてください。
一、 一般的に定数を定義する方法
私たちは通常public final staticを利用して定義しています。コードは以下の通りです。それぞれ1で赤信号を表し、3は緑信号を表し、2は黄色灯を表します。
package com.csdn.myEnum;
public class Light {
/* */
public final static int RED =1;
/* */
public final static int GREEN =3;
/* */
public final static int YELLOW =2;
}
二、 列挙の種類定義の定数方法列挙の種類の簡単な定義方法は以下の通りです。列挙の種類ごとの値を定義することはできないようです。例えば、赤信号と青信号と黄色灯を定義するコードは以下の通りかもしれません。
public enum Light {
RED , GREEN , YELLOW ;
}
赤信号と青信号と黄色灯しか表示できませんが、具体的な値は表示できません。急がないでください。エニュメレーションの種類が構造関数を提供していますので、構造関数と上書きtoSteringの方法で実現できます。まず、Lightエニュメレーションの種類に構造方法を追加し、各エニュメレート・タイプの値を構成関数によって対応するパラメータに入力し、同時にtoString方法を上書きし、この方法では構造関数から入ってきたパラメータを返します。
public enum Light {
//
RED (1), GREEN (3), YELLOW (2);
//
private int nCode ;
// ,
private Light( int _nCode) {
this . nCode = _nCode;
}
@Override
public String toString() {
return String.valueOf ( this . nCode );
}
}
三、 完全な例示コード列挙の種類の完全なデモコードは以下の通りです。
package com.csdn.myEnum;
import java.util.EnumMap;
import java.util.EnumSet;
public class LightTest {
// 1.
public enum Light {
//
RED (1), GREEN (3), YELLOW (2);
//
private int nCode ;
// ,
private Light( int _nCode) {
this . nCode = _nCode;
}
@Override
public String toString() {
return String.valueOf ( this . nCode );
}
}
/**
* @param args
*/
public static void main(String[] args ) {
// 1.
System. out .println( " ......" );
testTraversalEnum ();
// 2. EnumMap
System. out .println( " EnmuMap ....." );
testEnumMap ();
// 3. EnmuSet
System. out .println( " EnmuSet ....." );
testEnumSet ();
}
/**
*
*/
private static void testTraversalEnum() {
Light[] allLight = Light.values ();
for (Light aLight : allLight) {
System. out .println( " name : " + aLight.name());
System. out .println( " ordinal : " + aLight.ordinal());
System. out .println( " : " + aLight);
}
}
/**
* EnumMap , EnumMap HashMap , key
*/
private static void testEnumMap() {
// 1. EnumMap , EnumMap , key
EnumMap<Light, String> currEnumMap = new EnumMap<Light, String>(
Light. class );
currEnumMap.put(Light. RED , " " );
currEnumMap.put(Light. GREEN , " " );
currEnumMap.put(Light. YELLOW , " " );
// 2.
for (Light aLight : Light.values ()) {
System. out .println( "[key=" + aLight.name() + ",value="
+ currEnumMap.get(aLight) + "]" );
}
}
/**
* EnumSet , EnumSet , <BR/>
* allOf
*/
private static void testEnumSet() {
EnumSet<Light> currEnumSet = EnumSet.allOf (Light. class );
for (Light aLightSetElement : currEnumSet) {
System. out .println( " EnumSet : " + aLightSetElement);
}
}
}
実行結果は以下の通りです。
......
name : RED
ordinal : 0
: 1
name : GREEN
ordinal : 1
: 3
name : YELLOW
ordinal : 2
: 2
EnmuMap .....
[key=RED,value= ]
[key=GREEN,value= ]
[key=YELLOW,value= ]
EnmuSet .....
EnumSet : 1
EnumSet : 3
EnumSet : 2
四、 一般的に定数を定義する方法と列挙定義定数方法の違い以下の内容はつまらないかもしれませんが、絶対に見る価値があります。
1. コード:
public class State {
public static final int ON = 1;
public static final Int OFF= 0;
}
何か悪いことがあったら、みんなこのように使っています。大丈夫です。まず、安全なタイプではありません。あなたは必ずintであることを確認してください。
その次に、あなたはまだその範囲が0と1であることを確認します。
最後に、多くの時にあなたがプリントアウトした時、あなたは1と0しか見えません。
コードを見ていない人はあなたの意図を知らないです。古いpublic static finalの量を全部捨ててください。
2. エンム類を作って、普通の種類と見なしてもいいです。それ以外は他のクラスを引き継ぐことができません。javaは単一継承であり、Enumを継承しました。
他の方法を追加して、それ自体をカバーする方法があります。
3. switch()パラメータはenumを使用できます。
4. values()方法はコンパイラをenum定義に挿入するstatic方法です。だから、enumのインスタンスを上に父の種類のEumに変換する時は、values()はアクセスできません。解決方法:クラスの中に一つのget Enum Contents()の方法があります。だから、Enumインターフェースの中にvalues()の方法がなくても、私達は依然としてクラスの対象を通じてすべてのenumの実例を取得できます。
5. enumからサブクラスを継承できませんでした。enumの中の要素を拡張する必要があれば、インターフェースの内部に、このインターフェースを実現するための列挙を作成し、要素をグループ化します。エニュメレート・エレメントをグループ化するに至ります。
6. エンマセットをマークの代わりに使います。エンムはメンバーに唯一の要求をしますが、エンムから添加元素を削除することはできません。
7. EnumMapのkeyはenumで、valueは他のObjectの対象です。
8. enumはプログラマがeunmの実例のために方法を編纂することを許可します。したがって、各enumのインスタンスには、それぞれ異なる行動を与えることができる。
9. エンムの職責チェーンを使用して、これは設計モードの職責チェーンパターンに関係します。さまざまな方法で一つの問題を解決します。そして彼らをリンクします。要求が到来すると、このチェーンを巡回し、チェーンの中のある解決策が要求を処理することができるまで。
10. enumを使った状態機
11. enumを使って多重に分けます。
読んでくれてありがとうございます。みなさんのご協力をお願いします。ありがとうございます。