10.4列挙

Javaの列挙の概念を始めていないので、開発者は、代わりに列挙の複数の設計パターンを使用する必要があります。JDK1.5列挙

10.4.1列挙クラス定義していること

キーワード:列挙型は、列挙型の定義を実現するために、このキーワードを使用して、複数の設計パターンを定義列挙の使用を簡素化することができます
列挙の定義タイプ:例

public enum Color235 {
       RED,GREEN,BLUE;
}

public class Java235A {
	public static void main(String[] args) {
		Color235 d=Color235.RED;
		System.out.println(d);
	}
}

結果:RED

コールへの直接使用Enumerationオブジェクト名
注:列挙名の定義
のプログラムに、マルチデザインパターンの要件に沿ったものである、すべて大文字で使用されるすべてのオブジェクト名の列挙クラスの定義、列挙しばらくフォーム内のオブジェクトの中国名も定義するのに使用することができます
。例:列挙オブジェクト名の中国の定義の使用

public enum ColorChinese {
      红色,绿色,蓝色;
}

public class JavaChinese {
       public static void main(String[] args) {
		ColorChinese c=ColorChinese.红色;
		System.out.println(c);
	}
}

結果

红色

直接クラス名を使用して。漢字を。最も重要な機能を列挙すると、マルチデザインパターンの構造を簡素化する機能です

)マルチ列挙設計パターンの外側を簡素化することに加えて、だけでなく、列挙クラス.valuesによる操作を取得する便利な情報を提供**(**構成は、オブジェクトの列挙アレイの形ですべてのオブジェクトを取得することができます。
出力列挙のすべての内容:例

public enum Color235B {
       javase,javaweb,数据结构,框架;
}

public class Java235B {
       public static void main(String[] args) {
		 for(Color235B c:Color235B.values()) {
			 System.out.print(c+"、");
		 }
	}
}

結果:

javase、javaweb、数据结构、框架、

Color235Bは、その後、各オブジェクトを出力するためのforeachループを使用して取得した全ての列挙オブジェクトを取得するための値()メソッドを使用してこの手順。

マルチ列挙デザインパターンの代わりに採用されて非常に重要な理由は、オブジェクトが型がswitch文で直接決定された列挙することができるということであるです。
例:裁判官は、スイッチ内のタイプを列挙

public enum Color235 {
       RED,GREEN,BLUE;
}

public class Java236 {
       public static void main(String[] args) {
		Color235 c=Color235.RED;
		switch(c) {                  //支持枚举判断
		case RED:                    //匹配内容
			System.out.println("红色");
			break;
		
       case GREEN:                    //匹配内容
			System.out.println("绿色");
			break;
		
       case BLUE:                    //匹配内容
	        System.out.println("蓝色");
	        break;
       }
	}
}

この手順は、整合スイッチに直接実装することができるオブジェクトを列挙し、そして複数の設計パターンと、それだけでif文の多数によって決定された出力内容と一致させることができます。

提示:关于switch允许操作的数据类型
JDK1.5之前:只支持Int或Char型数据
JDK1.5之后:增加enum型数据
JDK1.7之后:增加String型数据

10.4.2Enumクラス

列挙は、彼はちょうどより便利な構造を提供し、新しいタイプではありません。java.lang.Enumを次のように厳密に言えば、各属しクラスの継承親クラスのEnumに、実際に列挙型クラスを使用して定義されたのではなく、クラスが定義されています

public abstract class Enum<E extends Enum<E>>
		extends Object implements Comparable<E>, Serializable {}

従来のテーブル列挙型クラスのような方法を提供しながら、それは、一般的な列挙型の制限内のクラスの定義をサポートすることができます

メソッド名 (タイプ)説明
保護された列挙型(文字列名、int型の序) 着信オブジェクトとシリアル番号の(構成)
公共の最終文字列名() (一般的な)は、オブジェクト名を取得します
公共の最終int型序() (通常)オブジェクト番号を取得します

列挙型クラスのコンストラクタは保護されたアクセスを使用して、実際にはこのパッケージも実装コンストラクタに属します。同時に、自動的にオブジェクト名と列挙オブジェクトの各インスタンスのシーケンス番号を渡すことができます。
例:キーワードと列挙型列挙型クラスとの間のリンクを観察します

public enum Color235 {
       RED,GREEN,BLUE;
}

public class Java237 {
       public static void main(String[] args) {
		for(Color235 c:Color235.values()) {
			System.out.println(c.ordinal()+"-"+c.name());
		}
	}
}

プログラムの結果

0-RED
1-GREEN
2-BLUE

このプログラムでは)クラスオブジェクト列挙ORDINAL(のすべての出力が起動され、対応する情報を取得するクラス列挙型で定義された名前()メソッド、実証することができ、列挙型は、デフォルトクラス継承列挙列挙クラスを定義しました。

10.4.3定義された列挙構造

列挙部材プロパティ、コンストラクタは、通常の方法も定義することができます。デザインパターンは、複数列挙本質である。しかし、この方法では公共工事が定義されて許可されていません。クラスは、コンストラクタのパラメータを提供しません場合は、各列挙オブジェクトの内容を定義するときは、明示的にパラメータを渡す必要があります。
例:列挙クラスのメンバープロパティとメソッドを定義します

public enum Color237 {                    //枚举类
       RED("红色"),GREEN("绿色"),BLUE("蓝色");//枚举对象要写在首行
	   private String title;               //成员属性
	   private Color237(String title) {          //构造方法初始化属性
		   this.title=title;
	   }
	   @Override
	   public String toString() {
		   return this.title;
	   }
}


public class Java238A {
      public static void main(String[] args) {
		for(Color237 c:Color237.values()) {
			System.out.println(c.ordinal()+"-"+c.name()+"-"+c);
		}
	}
} 

結果

0-RED-红色
1-GREEN-绿色
2-BLUE-蓝色

構造は、列挙法の構成で定義され、オブジェクト・クラスの、toString()メソッドをオーバーライドし、それを見つけることができる列挙機能構成は、Javaで拡張されているので、クラス構造近づくこと。
例:列挙型クラスの実装インタフェースによってその

public interface IMessage {
       public String getMessage();
}


public enum Color238 implements IMessage {  //枚举类实现接口
	RED("红色"),GREEN("绿色"),BLUE("蓝色");      //枚举对象要写在首行
	private String title;                 //成员属性
	private Color238(String title) {      //构造方法初始化属性
		this.title=title;
	}

	@Override
	public String getMessage() {        //方法覆写
		
		return this.title;
	}
        
}

public class Java238 {
        public static void main(String[] args) {
			IMessage msg=Color238.BLUE;
			System.out.println(msg.getMessage());
		}
}

結果

蓝色

あなたはColor238 IMessageがインターフェイスがサブクラスであるため、すべての列挙クラスのオブジェクトは、オブジェクトの実装までを遷移することができますので、列挙クラスのインターフェイスの抽象メソッドをオーバーライドする必要がありますので、このプログラムでは、列挙実装IMessageがインターフェイスをすることができますIMessageがインタフェースオブジェクトがインスタンス化されます。

列挙は、直接、抽象メソッドを定義することができ、その後、あなたは、この列挙内の各オブジェクトを抽象メソッドに実装されていることができる特別な機能があります。
例:列挙で抽象メソッドを定義します

package com.lxh.tenchapter;

public enum Color239 {
       RED("红色"){
    	   @Override
    	   public String getMessage() {    //覆写抽象方法
    		   return "【RED】"+this;
    	   }
       },GREEN("绿色"){
    	   @Override
    	   public String getMessage() {
    		   return "【RREEN】"+this;
    	   }
       },BLUE("蓝色"){
    	   @Override
    	   public String getMessage() {
    		   return "【BLUE】"+this;
    	   }
       };
	private String title;
	private Color239(String title) {
		this.title=title;
	}
	public String toString() {      //输出对象信息
		return this.title;
	}
	public abstract String getMessage();    //直接定义抽象方法 
}


public class Java239 {
       public static void main(String[] args) {
		System.out.println(Color239.BLUE.getMessage());
	}
}

結果

【BLUE】蓝色

この抽象メソッドは、各クラスのオブジェクトに列挙されているオーバーライドする必要があるので抽象キーワードを使用してこの手順は、列挙内の抽象メソッドを定義します。

10.4.4列挙アプリケーション

列挙は、オブジェクトインスタンスの範囲の定義である、とタイプ列挙属性タイプの部材として使用することができます。例えば、Personクラスの定義は今、どの性別の属性を提供する必要性、および性別は、ユーザーが簡単に最も適切な列挙を使用するので、入力する必要はありません。
例:列挙構造用途

public enum Sex {
       NAM("男"),WOMAN("女");
       private String title;
       private Sex(String title) {
    	   this.title=title;
       }
       public String toString() {   //获取对象信息
    	   return this.title;
       }
}


public class Person {
       private String name;
       private int age;
       private Sex sex;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public Sex getSex() {
		return sex;
	}
	public void setSex(Sex sex) {
		this.sex = sex;
	}
	public Person(String name, int age, Sex sex) {
		this.name = name;
		this.age = age;
		this.sex = sex;
	}
	@Override
	public String toString() {
		return "Person [姓名=" + name + ", 年龄=" + age + ", 性别=" + sex + "]";
	}
       
	
}


public class Java240 {
       public static void main(String[] args) {
		Person per=new Person("李明",20,Sex.NAM);
		System.out.println(per);
	}
}

結果

Person [姓名=李明, 年龄=20, 性别=男]

インスタンス化されたPersonクラスのオブジェクトが範囲セックス・オブジェクトに定義することができるPersonクラス定義は、この手順列挙型を使用する場合。

公開された162元の記事 ウォンの賞賛9 ビュー3096

おすすめ

転載: blog.csdn.net/ll_j_21/article/details/104682123