Java Eumの使い方について詳しく説明します。
8458 ワード
Java Eumの使い方について詳しく説明します。
使い方一:定数
JDK 1.5の前に、私達は定数を定義します。public static fianlです。今はいいです。エニュメレーションがあります。関連する定数を一つのエニュメレート・タイプにグループ化して、エニュメレーションは常量より多い方法を提供します。
JDK 1.6前のswitch文はint、char、enumタイプだけをサポートしています。列挙を使って、コードの読み取り可能性をより強くします。
自分の方法をカスタマイズするには、enumのインスタンスシーケンスの最後にセミコロンを追加しなければなりません。そして、Javaは、まずenumインスタンスを定義しなければならない。
String()方法でカバーされる例を以下に示す。
すべての列挙はjava.lang.Enum類から継承されています。Javaは継承がサポートされていないため、列挙対象は他のクラスを引き継ぐことができません。
java.util.EnumSetとjava.util.EnumMapは二つの列挙の集まりです。EnumSetは、集合中の要素が重複しないことを保証する。EumMapのkeyはenumタイプですが、valueは任意のタイプです。この二つのセットの使用についてはここで詳しく説明しません。JDK文書を参照することができます。
列挙と定数定義の違い
一、通常定数の定義方法
私たちは通常public final staticを利用して定義しています。コードは以下の通りです。それぞれ1で赤信号を表し、3は緑信号を表し、2は黄色灯を表します。
列挙の種類の簡単な定義方法は以下の通りです。列挙の種類ごとの値を定義することはできないようです。例えば、赤信号と青信号と黄色灯を定義するコードは以下の通りかもしれません。
列挙の種類の完全なデモコードは以下の通りです。コード:public class State{ を捨てます。はenum類を作成して、普通の種類と見なします。それ以外は他のクラスを引き継ぐことができません。(javaは単一継承であり、既にEnumを継承している)他の方法を追加して、それ自体をカバーする方法 switch()パラメータはenumを使用できます。 values()方法は、コンパイラがenum定義に挿入されたstatic方法であるので、enumのインスタンスを上にすると、親のEumに変換されます。values()はアクセスできません。解決方法:Classにはget Enum Contacts()の方法がありますので、もしEnumインターフェースにvalues()の方法がなくても、Classオブジェクトを通じてすべてのenumインスタンス を取得できます。は、enumからサブクラスを継承することができません。enum中の要素を拡張する必要があれば、インターフェースの内部に、このインターフェースを実現するための列挙を作成し、要素をグループ化します。エニュメレート・エレメントをグループ化するに至ります。 は、エンマセットの代替マークを使用する。エンムはメンバーに唯一の要求をしますが、エンムから添加元素を削除することはできません。 EnumMapのkeyはenumであり、valueは他のObjectのオブジェクトでもあります。 enumは、プログラマがeunmのインスタンスの作成方法を許可する。したがって、各enumのインスタンスには、それぞれ異なる行動を与えることができる。 はenumの職責チェーンを使用しています。これは設計モードの職責チェーンパターンに関係しています。さまざまな方法で一つの問題を解決します。そして彼らをリンクします。要求が到来すると、このチェーンを巡回し、チェーンの中のある解決策が要求を処理することができるまで。 enumを使用した状態機 enum多重を使って を分配します。
使い方一:定数
JDK 1.5の前に、私達は定数を定義します。public static fianlです。今はいいです。エニュメレーションがあります。関連する定数を一つのエニュメレート・タイプにグループ化して、エニュメレーションは常量より多い方法を提供します。
public enum Color {
RED, GREEN, BLANK, YELLOW
}
使い方二:スイッチJDK 1.6前のswitch文はint、char、enumタイプだけをサポートしています。列挙を使って、コードの読み取り可能性をより強くします。
enum Signal {
GREEN, YELLOW, RED
}
public class TrafficLight {
Signal color = Signal.RED;
public void change() {
switch (color) {
case RED:
color = Signal.GREEN;
break;
case YELLOW:
color = Signal.RED;
break;
case GREEN:
color = Signal.YELLOW;
break;
}
}
}
用法三:列挙に新しい方法を追加する自分の方法をカスタマイズするには、enumのインスタンスシーケンスの最後にセミコロンを追加しなければなりません。そして、Javaは、まずenumインスタンスを定義しなければならない。
public enum Color {
RED(" ", 1), GREEN(" ", 2), BLANK(" ", 3), YELLO(" ", 4);
//
private String name;
private int index;
//
private Color(String name, int index) {
this.name = name;
this.index = index;
}
//
public static String getName(int index) {
for (Color c : Color.values()) {
if (c.getIndex() == index) {
return c.name;
}
}
return null;
}
// get set
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getIndex() {
return index;
}
public void setIndex(int index) {
this.index = index;
}
}
使い方四:列挙を覆う方法String()方法でカバーされる例を以下に示す。
public class Test {
public enum Color {
RED(" ", 1), GREEN(" ", 2), BLANK(" ", 3), YELLO(" ", 4);
//
private String name;
private int index;
//
private Color(String name, int index) {
this.name = name;
this.index = index;
}
//
@Override
public String toString() {
return this.index + "_" + this.name;
}
}
public static void main(String[] args) {
System.out.println(Color.RED.toString());
}
}
使い方五:実現インターフェースすべての列挙はjava.lang.Enum類から継承されています。Javaは継承がサポートされていないため、列挙対象は他のクラスを引き継ぐことができません。
public interface Behaviour {
void print();
String getInfo();
}
public enum Color implements Behaviour {
RED(" ", 1), GREEN(" ", 2), BLANK(" ", 3), YELLO(" ", 4);
//
private String name;
private int index;
//
private Color(String name, int index) {
this.name = name;
this.index = index;
}
//
@Override
public String getInfo() {
return this.name;
}
//
@Override
public void print() {
System.out.println(this.index + ":" + this.name);
}
}
使い方六:インターフェースを使って列挙を組織します。public interface Food {
enum Coffee implements Food {
BLACK_COFFEE, DECAF_COFFEE, LATTE, CAPPUCCINO
}
enum Dessert implements Food {
FRUIT, CAKE, GELATO
}
}
用法七:列挙集合の使用についてjava.util.EnumSetとjava.util.EnumMapは二つの列挙の集まりです。EnumSetは、集合中の要素が重複しないことを保証する。EumMapのkeyはenumタイプですが、valueは任意のタイプです。この二つのセットの使用についてはここで詳しく説明しません。JDK文書を参照することができます。
列挙と定数定義の違い
一、通常定数の定義方法
私たちは通常public final staticを利用して定義しています。コードは以下の通りです。それぞれ1で赤信号を表し、3は緑信号を表し、2は黄色灯を表します。
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);
}
}
三、完全な例示コード列挙の種類の完全なデモコードは以下の通りです。
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 currEnumMap = new EnumMap(
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 ,
*
* allOf
*/
private static void testEnumSet() {
EnumSet 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
四、通常は定数方法と列挙定義定数方法の違いを定義する。 public static final int ON = 1;
public static final Int OFF= 0;
}何か悪いことがあったら、みんなはこのように長い時間を使いました。大丈夫です。まず、安全なタイプではありません。あなたが確認しなければならないのはintの次で、あなたはまだその範囲が0と1の最後であることを確保して、多くの時にあなたがプリントアウトした時、あなたは1と0だけを見て、しかしそのコードを見ていない人はあなたの意図を知らないで、あなたのすべての古いpublic static final定数