package com.ydlclass.enumTest;
import com.ydlclass.FruitEnum;//idea自动导包功能
import static com.ydlclass.FruitEnum.*;//idea静态导入包的功能,所以可以直接使用
public enum SeasonEnum {
SPRING("春天","万物复苏,百花齐放"),
SUMMER("夏天","电闪雷鸣"),
AUTUMU("秋天","树叶凋零"),
WINTER("冬天","白雪皑皑");
//为枚举添加新的方法:由于每个枚举的对象实质就是使用一个类定义了一堆的静态常量,并且这些静态常量就是这个对象,所以可以理解为使用饿汉式来定义的。
//比如说,我们想对这些季节增加一些额外的描述,例如名字,这个季节的特点是怎样的;
public String name;
public String detail;
SeasonEnum() {
}
SeasonEnum(String name, String detail) {
this.name = name;
this.detail = detail;
}
public String getName(){
return this.name;
}
public void setName(String name){
this.name = name;
}
public String getDetail(){
return this.detail;
}
public void setDetail(String detail){
this.detail = detail;
}
//有了成员变量之后我们可以加上有参构造,这样我们的枚举就可以使用有参构造了;(也就是需要理解枚举的本质是什么)
//Switch种可以使用集中数据类型:int ,short,String,byte,但是不能使用long,还可以使用enum
public static void test(SeasonEnum seasonEnum){//此处使用静态常量也是可以做的,但是枚举的方式要比静态常量安全,毕竟枚举种只有这几个枚举实例
//但是如果是静态常量的话,这里可以随便case,这就是枚举带来的好处。
switch (seasonEnum){//这里传入的是枚举的实例,也就是说是枚举类种的一个实例,或者是其他的实例
case SUMMER:
System.out.println("夏天了");
break;
case SPRING:
System.out.println("春天了");
break;
case AUTUMU:
System.out.println("秋天了");
break;
case WINTER:
System.out.println("冬天了");
break;
default:
System.out.println("毁灭了");
break;//需要加上break关键字,帮助我们停止继续打印;
}
}
public static void main(String[] args) {
SeasonEnum[] values = SeasonEnum.values();
for (int i = 0; i < values.length; i++) {
System.out.println(values[i].getDetail());
}
String name = SeasonEnum.SUMMER.getName();
String detail = SeasonEnum.SUMMER.getDetail();
System.out.println(name + ":" + detail);//我们独自为每个枚举的实例增加了两个字段以及相应的成员方法,这就是为枚举增加方法
SeasonEnum.test(SeasonEnum.AUTUMU);//这就是switch使用枚举的方式
//枚举的静态导入,当我们在使用其他的枚举类中的枚举实例时通常时idea帮助我们实现自动导包的功能,但是这样做不妥之处是每次使用时仍需写类名
FruitEnum apple = APPLE;
System.out.println(ORIGIN.getDeclaringClass());
}
}