枚举类型(enum type)是指由一组固定的常量组成合法的类型。Java中由关键字enum来定义一个枚举类型。
1、通过关键字enum定义枚举类型
public enum Season {
SPRING, SUMMER, AUTUMN, WINER;
}
2、枚举类型默认方法
创建enum时,编译器会为你生成一个相关的类,这个类继承java.lang.Enum。
另外还有神秘的方法:values()
3、用法
3.1、定义常量
3.2、switch语句
enum Signal { GREEN, YELLOW, RED}
public class TrafficLight {
Signal color = Signal.RED;
public void change() {
switch (color) {
case RED:
color = Signal.GREEN; break;
case YELLOW:
color = Signal.RED; break;
case GREEN:
color = Signal.YELLOW; break;
}
}
@Override public String toString() {
return "The traffic light is "+color;
}
public static void main(String[] args) {
TrafficLight trafficLight = new TrafficLight();
for(int i = 0; i < 4;i++){
System.out.println(trafficLight);
trafficLight.change();
}
}
}
3.3 向enum中添加新方法
// 定义 RSS(Really Simple Syndication) 种子的枚举类型
public enum NewsRSSFeedEnum {
/ / 雅虎头条新闻 RSS 种子
YAHOO_TOP_STORIES("http://rss.news.yahoo.com/rss/topstories"),
//CBS 头条新闻 RSS 种子
CBS_TOP_STORIES("http://feeds.cbsnews.com/CBSNewsMain?format=xml"),
// 洛杉矶时报头条新闻 RSS 种子
LATIMES_TOP_STORIES("http://feeds.latimes.com/latimes/news?format=xml");
// 枚举对象的 RSS 地址的属性
private String rss_url;
// 枚举对象构造函数
private NewsRSSFeedEnum(String rss) {
this.rss_url = rss;
}
// 枚举对象获取 RSS 地址的方法
public String getRssURL() {
return this.rss_url;
}
}
3.4 不同枚举实例具有不同行为
public enum ConstantSpecificMethod {
DATA_TIME{
String getInfo(){
return DateFormat.getDateInstance().format(new Date());
}
},
CLASSPATH{
String getInfo(){
return System.getenv("CLASSPATH");
}
};
abstract String getInfo();
public static void main(String[] args) {
for(ConstantSpecificMethod csm: values()){
System.out.println(csm.getInfo());
}
}
}
3.5 使用枚举创建单例
public class EnumSingleton {
private EnumSingleton(){}
public static EnumSingleton getInstance(){
return Singleton.INSTANCE.getInstance();
}
private static enum Singleton{
INSTANCE;
private EnumSingleton singleton; //JVM会保证此方法绝对只调用一次
private Singleton(){
singleton = new EnumSingleton();
}
public EnumSingleton getInstance(){
return singleton;
}
}
}
EnumSet和EnumMap
- EnumSet方法
- EnumMap