枚举的小示例:
更简单的对枚举的一种认识:我们自己写了个类,这个类里面有数据成员,方法成员。不过我们不用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());
}
}
}