1. 程式人生 > >Java 列舉7個特性

Java 列舉7個特性

**在JDK1.5 之前,我們定義常量都是: public static final… 。現在好了,有了列舉,可以把相關的常量分組到一個列舉型別裡,而且列舉提供了比常量更多的方法。 **

  1. 自定義列舉
package cn.itcast.test;

/**
 * 自定義列舉方法
 * 
 * @author cjj
 * @date 2018年9月28日
 * @email [email protected]
 * @blog blog.csdn.net/qq_29451823
 */
public enum MyEnumTest1 {
	CJJ("帥氣", 1), LX("成熟", 2), LQ("老氣", 3);

	private String name;
	private Integer index;

	// 其中構造方法的訪問許可權必須比類的許可權小
	private MyEnumTest1(String name, Integer index) {
		this.name = name;
		this.index = index;
	}

	public static String getName(Integer index) {
		for (MyEnumTest1 c : MyEnumTest1.values()) {
			if (c.getIndex() == index) {
				return c.getName();
			}
		}
		return null;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public Integer getIndex() {
		return index;
	}

	public void setIndex(Integer index) {
		this.index = index;
	}
}

  1. 主函式執行
package cn.itcast.test;
/**
 * 主函式入口
 * @author cjj
 * @date 2018年9月28日
 * @email [email protected]
 * @blog blog.csdn.net/qq_29451823
 */
public class MainTest {

	public static void main(String[] args) {
		for(int i=1 ; i <= MyEnumTest1.values().length ; i++) {
			System.out.println("第"+i+"個元素是:"+MyEnumTest1.getName(i));
		}
	}

}

3.執行結果 在這裡插入圖片描述 4.重寫ToString 方法 在這裡插入圖片描述

package cn.itcast.test;
/**
 * 主函式入口
 * @author cjj
 * @date 2018年9月28日
 * @email [email protected]
 * @blog blog.csdn.net/qq_29451823
 */
public class MainTest {

	public static void main(String[] args) {
		for(int i=1 ; i <= MyEnumTest1.values().length ; i++) {
			System.out.println("第"+i+"個元素是:"+MyEnumTest1.getName(i));
			//根據具體的列舉名稱來尋找對應的列舉常量
			MyEnumTest1 test = MyEnumTest1.GetMyEnumTest1("CJJ");
			System.out.println(test);
		}
		
	}
	
}

執行效果: 在這裡插入圖片描述 5.實現介面 自定義介面MyInterceptor

package cn.itcast.test;

public interface MyInterceptor {
    void printf();
    String getInfo();
}

列舉實現介面

package cn.itcast.test;

/**
 * 自定義列舉方法
 * 
 * @author cjj
 * @date 2018年9月28日
 * @email [email protected]
 * @blog blog.csdn.net/qq_29451823
 */
public enum MyEnumTest1 implements MyInterceptor{
	CJJ("帥氣", 1), LX("成熟", 2), LQ("老氣", 3);

	private String name;
	private Integer index;

	// 其中構造方法的訪問許可權必須比類的許可權小
	private MyEnumTest1(String name, Integer index) {
		this.name = name;
		this.index = index;
	}

	public static String getName(Integer index) {
		for (MyEnumTest1 c : MyEnumTest1.values()) {
			if (c.getIndex() == index) {
				return c.getName();
			}
		}
		return null;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public Integer getIndex() {
		return index;
	}

	public void setIndex(Integer index) {
		this.index = index;
	}
	
	public static MyEnumTest1 GetMyEnumTest1(String input) {
		return valueOf(input);
	}
	
	@Override
	public  String toString() {
		return "MyEnumTest1[ " + this.index + this.name + " ] ";
	}

	@Override
	public void printf() {
		//name 代表列舉中常量中具體的引數
		System.out.println(this.index + this.name);
	}

	@Override
	public String getInfo() {
		//其中name()代表具體的列舉種常量名
		return this.name();
	}
}

主函式類

package cn.itcast.test;
/**
 * 主函式入口
 * @author cjj
 * @date 2018年9月28日
 * @email [email protected]
 * @blog blog.csdn.net/qq_29451823
 */
public class MainTest {

	public static void main(String[] args) {
//		for(int i=1 ; i <= MyEnumTest1.values().length ; i++) {
//			System.out.println("第"+i+"個元素是:"+MyEnumTest1.getName(i));
//			//根據具體的列舉名稱來尋找對應的列舉常量
//			MyEnumTest1 test = MyEnumTest1.GetMyEnumTest1("CJJ");
//			System.out.println(test);
//		}
		MyInterceptor test2  = MyEnumTest1.CJJ;
		test2.printf();
		System.out.println(test2.getInfo());
	}
	
}

執行結果 在這裡插入圖片描述 6.在介面內部寫列舉實現介面

package cn.itcast.test;

/**
 * 列舉在介面的內部
 * @author cjj
 * @date 2018年9月28日
 * @email [email protected]
 * @blog blog.csdn.net/qq_29451823
 */
public interface AtInterfaceInnnerEnum {
	enum Coffee implements AtInterfaceInnnerEnum {
		LEFT_COFFEE,HEAD_COFFEE,RIGHT_COFFEE,BOTTON_COFFEEE;
	}
	
	enum Dessert implements AtInterfaceInnnerEnum {
		LIKE_DESSERT,HEAT_DESSERT;
	}
}

主函式

package cn.itcast.test;

import cn.itcast.test.AtInterfaceInnnerEnum.Dessert;

/**
 * 主函式入口
 * @author cjj
 * @date 2018年9月28日
 * @email [email protected]
 * @blog blog.csdn.net/qq_29451823
 */
public class MainTest {

	public static void main(String[] args) {
		for(AtInterfaceInnnerEnum.Coffee c : AtInterfaceInnnerEnum.Coffee.values()) {
			System.out.println(c);
		}
		AtInterfaceInnnerEnum inEnum = AtInterfaceInnnerEnum.Coffee.BOTTON_COFFEEE;
		System.out.println(inEnum);
		AtInterfaceInnnerEnum inEnum1 = AtInterfaceInnnerEnum.Dessert.LIKE_DESSERT;
		System.out.println(inEnum1);
	}
	
}

執行結果 在這裡插入圖片描述 7.java.util.EnumSet和java.util.EnumMap是兩個列舉集合。

package cn.itcast.test;

import java.util.EnumMap;
import java.util.EnumSet;

/**
 * 主函式入口
 * @author cjj
 * @date 2018年9月28日
 * @email [email protected]
 * @blog blog.csdn.net/qq_29451823
 */
public class MainTest {

	public static void main(String[] args) {
		//建立一個元素就是MyEnumTest1型別的元素的集合
		EnumSet st1 = EnumSet.allOf(MyEnumTest1.class);
		System.out.println(st1);//輸出[MyEnumTest1[ 1帥氣 ] , MyEnumTest1[ 2成熟 ] , MyEnumTest1[ 3老氣 ] ]
		//建立一個元素指定為MyEnumTest1型別的空集合
		EnumSet st2 = EnumSet.noneOf(MyEnumTest1.class);
		System.out.println(st2);//輸出[]
		st1.add(MyEnumTest1.CJJ);
		st2.add(MyEnumTest1.LQ);
		System.out.println(st1);//輸出[MyEnumTest1[ 1帥氣 ] , MyEnumTest1[ 2成熟 ] , MyEnumTest1[ 3老氣 ] ]
		System.out.println(st2);//輸出[MyEnumTest1[ 3老氣 ] ]
		EnumSet st3 = EnumSet.of(MyEnumTest1.CJJ,MyEnumTest1.LQ);//插入幾個資料就有幾個
		System.out.println(st3);//輸出[MyEnumTest1[ 1帥氣 ] , MyEnumTest1[ 3老氣 ] ]
		EnumSet<MyEnumTest1> st4 = EnumSet.range(MyEnumTest1.CJJ, MyEnumTest1.LQ);//插入資料的範圍
		System.out.println(st4);//輸出[MyEnumTest1[ 1帥氣 ] , MyEnumTest1[ 2成熟 ] , MyEnumTest1[ 3老氣 ] ]
		//EnumMap集合
		EnumMap ma1 = new EnumMap(MyEnumTest1.class);
		System.out.println("map的列舉"+ma1);//輸出map的列舉{}
		ma1.put(MyEnumTest1.CJJ, "愛你額");
		System.out.println("map的列舉"+ma1);//輸出map的列舉{MyEnumTest1[ 1帥氣 ] =愛你額}
	}
	
}