一、枚举在Switch中的应用
public enum MyColor{
//每个枚举值用逗号隔开,
RED,
BLUE,
GREEN;//最后的分号可要或不要
}
public class Test1{
public static void main(String[] args){
MyColor myColor = MyColor.RED;
switch(myColor){
case BLUE://这里就可以直接使用枚举值
System.out.println("蓝色");
break;
case GREEN:
System.out.println("绿色");
break;
case RED:
System.out.println("红色");
break;
default:
System.out.println("什么色?");
break;
}
}
}
二、枚举的构造函数
enum MyColor{
RED("Hot", 4), BLUE("SAD",8);
private String mood;
public String getMood{
return mood;
}
private int index;
public int getIndex(){
return index;
}
private MyColor(String mood, int index){
this.mood = mood;
this.index = index;
}
}
System.out.println(MyColor.RED.getMood());
枚举成员均要实现构造函数
三、枚举的抽象方法
/**
* 订单状态
*
* 实现带有抽象方法的枚举
*
* @author wang
*
*/
public enum OrderState {
/** 已取消 */
CANCEL {public String getName(){return "已取消";}},
/** 待审核 */
WAITCONFIRM {public String getName(){return "待审核";}},
/** 等待付款 */
WAITPAYMENT {public String getName(){return "等待付款";}},
/** 正在配货 */
ADMEASUREPRODUCT {public String getName(){return "正在配货";}},
/** 等待发货 */
WAITDELIVER {public String getName(){return "等待发货";}},
/** 已发货 */
DELIVERED {public String getName(){return "已发货";}},
/** 已收货 */
RECEIVED {public String getName(){return "已收货";}};
public abstract String getName();
}
枚举成员均要实现抽象方法
四、枚举实现接口
package yuki.core.enumeration.interfaces;
import java.util.Arrays;
import java.util.List;
public class PlanetTest {
private interface Move{
void move();
};
private enum Planet implements Move{
SOLAR,
EARTH{
@Override
public void move() {
System.out.println("rounding...center:" + SOLAR);
}
},
MOON{
@Override
public void move() {
System.out.println("rounding...center:" + EARTH);
}
};
@Override
public void move() {
System.out.println("rounding...");
}
}
public static void main(String[] args) {
List<Planet> planets = Arrays.asList(Planet.values());
for(Planet planet : planets){
System.out.print(planet + " : ");
planet.move();
}
}
}
SOLAR : rounding...
EARTH : rounding...center:SOLAR
MOON : rounding...center:EARTH
枚举成员均要实现接口方法,可单独实现,亦可统一实现~
五、枚举常用方法
int
**compareTo**(E o)
比较此枚举与指定对象的顺序。
Class<E>
**getDeclaringClass**()
返回与此枚举常量的枚举类型相对应的 Class 对象。
String
**name**()
返回此枚举常量的名称,在其枚举声明中对其进行声明。
int
**ordinal**()
返回枚举常量的序数(它在枚举声明中的位置,其中初始常量序数为零)。
String
**toString**()
返回枚举常量的名称,它包含在声明中。
static `<T extends Enum<T>> T`
**valueOf**(Class<T> enumType, String name)
返回带指定名称的指定枚举类型的枚举常量。
六、EnumSet,EnumMap 的应用
public class Test {
public static void main(String[] args) {
// EnumSet的使用
EnumSet<EnumTest> weekSet = EnumSet.allOf(EnumTest.class);
for (EnumTest day : weekSet) {
System.out.println(day);
}
// EnumMap的使用
EnumMap<EnumTest, String> weekMap = new EnumMap(EnumTest.class);
weekMap.put(EnumTest.MON, "星期一");
weekMap.put(EnumTest.TUE, "星期二");
// ... ...
for (Iterator<Entry<EnumTest, String>> iter = weekMap.entrySet().iterator(); iter.hasNext();) {
Entry<EnumTest, String> entry = iter.next();
System.out.println(entry.getKey().name() + ":" + entry.getValue());
}
}
}
七、覆盖枚举的方法
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;
}
//覆盖方法
@Override
public String toString() {
return this.index+"_"+this.name;
}
}
八、让相同枚举类型下的枚举值具有不同的行为--重写枚举值的方法
public enum MyColor{
RED, BLUE(){
@Override
public boolean getFlag(){
return false;
}
};
public boolean getFlag(){
return true;
}
}
// 调用
System.out.println(MyColor.RED.getFlag()); // 显示true
System.out.println(MyColor.BLUE.getFlag()); // 显示false