枚举
1、常规使用:
package org.pbccrc.org.pbccrc.enmu;
//this is the basic use for enum
public enum Color {
RED,YELLOW,BLUE,GREEN,BLACK
}
测试用例:
public class EnumTestForBasic {
public static void main(String[] args) {
Color cl =Color.BLUE;
System.out.println(cl.toString());
System.out.println(cl);
}
}
2、1.7版本以后可以在switch中使用:
public class TestEnumSwitch {
public static void main(String[] args) {
Color clColor=Color.GREEN;
switch (clColor) {
case BLACK:
System.out.println("this color is black!");
break;
case GREEN:
System.out.println("this color is green!");
break;
default:
System.out.println("this color is other color!");
break;
}
}
}
3、给枚举类添加属性
public enum WeekDays {
MONDAY(1,"星期一"),TUESDAY(2,"星期二"),WEDNESDAY(3,"星期三")
,THURSDAY(4,"星期四")
,FRIDAY(5,"星期五"),SATURDAY(6,"星期六"),
SUNDAY(7,"星期日");
private Integer code;
private String desc;
private WeekDays(Integer num,String desc) {
this.code=num;
this.desc=desc;
}
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
}
注意:给枚举类添加属性值,其中的枚举类是已经定义好了的实例以及构造函数中需要的属性值;构造函数是私有函数;
4、实现接口
所有的枚举类都继承自java.lang.Enum,因为java不支持多继承,因为枚举类不能继承其他类,但是可以实现接口:
public enum WeekDays implements DescToday{
MONDAY(1,"星期一"),TUESDAY(2,"星期二"),WEDNESDAY(3,"星期三")
,THURSDAY(4,"星期四")
,FRIDAY(5,"星期五"),SATURDAY(6,"星期六"),
SUNDAY(7,"星期日");
private Integer code;
private String desc;
private WeekDays(Integer num,String desc) {
this.code=num;
this.desc=desc;
}
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
@Override
public String getThisDay() {
return this.desc;
}
}
接口:
public interface DescToday {
String getThisDay();
}
测试用例:
public class WeekDayTest {
public static void main(String[] args) {
System.out.println(WeekDays.FRIDAY.getThisDay());
}
}
5、在接口中添加enum的实例
public interface DateDesc {
enum weekDaysEnum implements DateDesc{
MONDAY,TUESDAY,WEDNESDAY,THURSDAY
,FRIDAY,SATURDAY,
SUNDAY
}
enum monthDay implements DateDesc{
JANUARY,FEBRUARY, MARCH,APRIL,MAY,
JUNE,JULY, AUGUST,SEPTEMBER,OCTOBER
,NOVEMBER,DECEMBER
}
}
public class DateTest {
public static void main(String[] args) {
System.out.println(DateDesc.monthDay.APRIL);
}
}
6、在enum中添加抽象方法;
public enum EnumAddAbatractClass {
SPRING {
@Override
String descThisSeasons() {
System.out.println("we have into spring");
return "春花";
}
},SUMMER {
@Override
String descThisSeasons() {
System.out.println("we have into summer");
return "夏阳";
}
},AUTUMN {
@Override
String descThisSeasons() {
System.out.println("we have into autumn");
return "秋月";
}
},WINTER {
@Override
String descThisSeasons() {
System.out.println("we have into winter");
return "冬雪";
}
};
abstract String descThisSeasons();
}
public class AddAbstractTest {
public static void main(String[] args) {
System.out.println(EnumAddAbatractClass.AUTUMN.descThisSeasons());
}
}
总结:枚举类是enum的常量实例,实例中可以定义自己的属性,构造函数式private的,也可以实现接口;
7、枚举的两个类:EnumMap 和EnumSet
public class EnumSetTest {
public static void main(String[] args) {
//use already enum to create enumSet
EnumSet<WeekDays> set =EnumSet.allOf(WeekDays.class);
for (WeekDays weekDays : set) {
System.out.println(weekDays);
}
//create a empty set
EnumSet<WeekDays> set2=EnumSet.noneOf(WeekDays.class);
System.out.println(set2.size());
set2.add(WeekDays.FRIDAY);
System.out.println(set2);
//create enumset that has only one element
EnumSet< WeekDays> set3=EnumSet.of(WeekDays.SATURDAY);
System.out.println(set3);
}
}
public class EnumMapTest {
public static void main(String[] args) {
EnumMap<WeekDays, Object> weekEnumMap= new EnumMap<WeekDays, Object>(WeekDays.class);
weekEnumMap.put(WeekDays.MONDAY, "1");
weekEnumMap.put(WeekDays.FRIDAY, "5");
EnumMap<WeekDays, Object> map2=new EnumMap<WeekDays, Object>(weekEnumMap);
System.out.println(map2);
Map mapsMap=new HashMap();
mapsMap.put(WeekDays.SATURDAY, "6");
EnumMap< WeekDays, Object> map3=new EnumMap<WeekDays, Object>(mapsMap);
System.out.println(map3);
}
}