1. 程式人生 > >Java基礎Demo -- enum列舉

Java基礎Demo -- enum列舉

列舉的小示例:

更簡單的對列舉的一種認識:我們自己寫了個類,這個類裡面有資料成員,方法成員。不過我們不用new來例項化這個類,而是enum定義的時候,就定義好了幾個列舉值常量,每個常量都是這個類的物件,而且是public static final修飾的物件。每個物件呢,有自己的資料成員私有副本,還可以實現出不同版本的方法成員。
 

import java.util.*;

enum CompanyEnum { 

    SF("順豐速運", 1001), YTO("圓通速遞", 1002), STO("申通物流", 1003), YD("韻達快運", 1004), YZPY("中國郵政", 1005); 
	
    private CompanyEnum(String company, int code) { 
	this.company = company; 
	this.code = code; 
    } 
	
    private String company; // 公司名稱 
    private int code;	    // 公司編碼
	
    public String getCompany() { return company; } 
    public void setCompany(String company) { this.company = company; } 
    public int getCode() { return code; } 
    public void setCode(int code) { this.code = code; } 
	
    //根據物流公司名字獲取對應的編碼 
    public static int getCodeByCompany(String company) { 
	for (CompanyEnum c : CompanyEnum.values()) 
            if (c.getCompany().equals(company.trim())) 
		return c.code;
	return 0; 
    } 

    //根據物流公司編碼獲取對應的名字 
    public static String getCompanyByCode(int code) { 
	for (CompanyEnum c : CompanyEnum.values()) 
	    if (c.getCode() == code) 
		return c.getCompany(); 
	return null; 
    } 
}

enum Grade3{ //列舉型別Grade,每個常量物件都有自己獨特的行為
    A{
	public void template(){ System.out.println("A"); }
    },
    B{
	public void template(){ System.out.println("B"); }
    };

    public abstract void template();
}

enum Grade2{ //列舉型別Grade 無建構函式
    Perfect,Good,Common,Bad; //擁有的四個常量,預設是public static final
}

enum Grade{ //列舉型別Grade 有建構函式
    Perfect(),Good(),Common(),Bad();

    private int score; //每種列舉常量值的分數
    Grade(int score){ this.score = score;}
    Grade(){}

    public int getScore(){ return score; }
    public void setScore(int score){
	this.score = score;
    }
}


public class EnumDemo
{
    public static void main(String[] args) {

    /**
     * 有建構函式的列舉,每一個常量都是該列舉的一個物件
     */
    Grade.Perfect.setScore(90); 
    System.out.println(Grade.Perfect.getScore()); //輸出90
    Grade.Good.setScore(80);
    System.out.println(Grade.Good.getScore());    //輸出80
    Grade.Common.setScore(60);
    System.out.println(Grade.Common.getScore());  //輸出60
    Grade.Bad.setScore(50);
    System.out.println(Grade.Bad.getScore());     //輸出50

    /**
     * 列舉的常用方法
     */
    System.out.println( Grade.Bad.ordinal());
    System.out.println( Grade.Good.compareTo(Grade.Bad));
    System.out.println( Grade.Good.equals(Grade2.Good));

    Grade3 g3 = Grade3.A;
    g3.template();

    /**
     * EnumSet的使用
     */ 
    EnumSet<CompanyEnum> companySet = EnumSet.allOf(CompanyEnum.class); 
    for (CompanyEnum company:companySet) 
	System.out.println(company.getCode() + ":" + company.getCompany());  
	 
    /**
     * EnumMap的使用
     */ 
    EnumMap<CompanyEnum, String> companyMap = new EnumMap(CompanyEnum.class); 
    companyMap.put(CompanyEnum.SF, "順豐map"); 
    companyMap.put(CompanyEnum.YTO, "圓通map"); 

    Iterator<Map.Entry<CompanyEnum, String>> iter = companyMap.entrySet().iterator(); 
    while(iter.hasNext()){ 
	Map.Entry<CompanyEnum, String> entry = iter.next(); 
	System.out.println(entry.getKey().name() + ":" + entry.getValue()); 
    }
}
}