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());


    }


}