枚举类型的比较取决于声明顺序
举类的实现类
java.lang.Enum < E > extends Object
static < T extends Enum < T >> T valueOf (Class < T > enumType, String name)
javax.lang.model.element.ElementKind extends java.lang.Enum < ElementKind >
# 实际创建枚举类型时继承的类
# 此类的静态方法不是Enum本身的方法,所以它们在java.lang.Enum的javadoc中没有出现。
static ElementKind valueOf (String name)
# 为提供的字符串返回一个枚举类型,该枚举类型必须精确地匹配源代码声明。
static ElementKind [] values ()
# 返回一个枚举类型所有可能值的数组。
定义1
public enum Color {
RED , GREEN , BLANK , YELLOW
# 元素列表必须在最前, 如果元素列表后面没有东西的话 ,可以省略分号
// 枚举的构造方法必须是私有的
// private WeekDay() {
//}
}
定义2
enum Signal {
GREEN , YELLOW , RED
}
定义3
自定义构造(要注意必须在enum的实例序列最后添加一个分号)
public enum Color {
RED ( "红色" , 1 ), GREEN ( "绿色" , 2 ), BLANK ( "白色" , 3 ), YELLO ( "黄色" , 4 );
// 成员变量
private String name;
private int index;
// 构造方法
private Color (String name , int index ) {
this .name = name;
this .index = index;
}
// 普通方法
public static String getName ( int index ) {
for (Color c : Color. values ()) {
if (c. getIndex () == index) {
return c.name;
}
}
return null ;
}
// get set 方法
public String getName () {
return name;
}
public void setName (String name ) {
this .name = name;
}
public int getIndex () {
return index;
}
public void setIndex ( int index ) {
this .index = index;
}
}
使用
public enum TrafficLamp {
RED ( 30 ) {
@ Override
public TrafficLamp nextLamp () {
return GREEN;
}
},
GREEN ( 45 ) {
@ Override
public TrafficLamp nextLamp () {
return YELLOW;
}
},
YELLOW ( 5 ) {
@ Override
public TrafficLamp nextLamp () {
return RED;
}
};
public abstract TrafficLamp nextLamp ();
private int time;
private TrafficLamp ( int time ) {
this .time = time;
}
}
@ Test
public void testHere () {
WeekDay weekDay = WeekDay.MON;
weekDay. toString ();
weekDay. name ();
// 排行
weekDay. ordinal ();
WeekDay. valueOf ( "SUN" );
WeekDay. values ();
}
自己实现
public abstract class WeekDay {
private WeekDay () {
};
/*
* public WeekDay nextDay(){ if(this == SUN){ return MON; }else { return
* SUN; } }
*/
public abstract WeekDay nextDay ();
public final static WeekDay SUN = new WeekDay () {
@ Override
public WeekDay nextDay () {
return MON;
}
};
public final static WeekDay MON = new WeekDay () {
@ Override
public WeekDay nextDay () {
return SUN;
}
};
@ Override
public String toString () {
return this == SUN ? "SUN" : "MON" ;
}
}
使用接口组织枚举
public interface Food {
enum Coffee implements Food {
BLACK_COFFEE , DECAF_COFFEE , LATTE , CAPPUCCINO
}
enum Dessert implements Food {
FRUIT , CAKE , GELATO
}
}
用switch判断
JDK1.6之前的switch语句只支持int,char,enum类型
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 ;
}
}
}
枚举的集合
java.util.EnumSet # 集合中的元素不重复
java.util.EnumMap # key是enum类型,而value则可以是任意类型。