Java言語基盤(102)-Java列挙型クラスの深い理解(列挙型を自分で実装するか、Javaネイティブ列挙型を実装するか)

列挙型クラスのアプリケーションシナリオ

場合によっては、選択できるいくつかの固定オプションがあります。列挙クラスが存在する前に、通常、それをいくつかの定数として定義することを選択します。列挙が存在した後、列挙を使用してそれを解決できます。たとえば、小さなゲームを設計するときは、限られた数の方向を使用し、各方向は異なるアクションを定義するため、この方向クラスは限られた数のインスタンスの場合であり、列挙を使用して、列挙を実現またはシミュレートできます成し遂げる。

列挙型を自分で実装します。

package EnumDemo;

public abstract class Director {
	
 // 提供有限的几个选项	
 // 抽象类本不可以new 但此处用匿名内部类的形式实现了Director中的move方法
 // 表面上看似是new了一个Director,实际是new的它的子类对象,用Director接收
 // 用的是多态的思想	
 public static final Director UP = new Director("UP"){
	@Override
	public void move() {
		 System.out.println("向上走");
	} 
 };
 public static final Director DOWN = new Director("DOWN"){
	@Override
	public void move() {
		System.out.println("向下走");
	}
 };
 public static final Director LEFT = new Director("LEFT"){
	@Override
	public void move() {
		System.out.println("向左走");
	}
 };
 public static final Director RIGHT = new Director("RIGHT"){
	@Override
	public void move() {
		System.out.println("向右走");
	} 
 };
 
 private String name;
 private Director(String name){
	 this.name = name;
 }
 public String getName(){
	 return this.name;
 }
 
 // 不同的方向在调用move时处理不同    所以这里定义为抽象方法
 public abstract void move();
 
}
テストデモ:

package EnumDemo;

public class DirectorDemo {
 
	public static void main(String[] args) {
		 Director d = Director.UP;
		 System.out.println(d.getName());// UP
		 d.move(); // 向上走
	}

}

Javaネイティブ列挙:

package EnumDemo;

public enum DirectorEnum {
 // 枚举项
 UP("UP"){

	@Override
	public void move() {
	 System.out.println("向上走");
	}
	 
 },
 // 带参构造 并且匿名内部类的方式实现抽象方法
 DOWN("DOWN") {
	@Override
	public void move() {
		System.out.println("向下走");
	}
},
LEFT("LEFT") {
	@Override
	public void move() {
	    System.out.println("向左走");
	}
},
RIGHT("RIGHT") {
	@Override
	public void move() {
		System.out.println("向右走");
	}
};
 private String name;
 private DirectorEnum(String name){
	 this.name = name;
 }
 public String getName(){
	 return this.name;
 }
 public abstract void move();
}

テストデモ:

package EnumDemo;

public class DirectorEnumDemo {

	public static void main(String[] args) {
		 DirectorEnum dd = DirectorEnum.DOWN;
		 System.out.println(dd.getName());// DOWN
		 dd.move();// 向下走
	}

}

注:列挙型に抽象メソッドを含める必要はありません。この例の抽象メソッドは、列挙型クラスの高度な使用法を説明するためだけのものです。


列挙に関する注意:

キーワードenumを使用して列挙クラスを定義します

すべての列挙クラスはEnumのサブクラスです

列挙型クラスの最初の行は列挙型項目でなければなりません

列挙型クラスはコンストラクタを持つことができますが、それらはプライベートである必要があり、デフォルトもプライベートです

列挙型クラスは抽象メソッドを持つこともできますが、列挙型項目はこのメソッドをオーバーライドする必要があります


おすすめ

転載: blog.csdn.net/wang740209668/article/details/78369832