泛型与枚举

package javase.gaoxin.jishu;

/*模拟JAVA中枚举类型的实现方式
 * 从以下的实验可以总结出:
 * 1)枚举类中的成员(除了枚举常量以外)都必须是private的;
 * 2)当枚举类只有一个‘枚举常量’时可以作为‘单例’
 */
public class WeekDay1 {

    public WeekDay1() {}
       
    //★★从以下枚举类的‘枚举常量’的‘定义’可以看出,每一个‘枚举常量’都是所在枚举类的一个‘实例对象’
    public final static WeekDay1 SUN = new WeekDay1();
    public final static WeekDay1 MON = new WeekDay1();
   
    public WeekDay1 nextDay(){
    if(this==SUN){
        return MON;
    }
    else
       return SUN;
    }
   
    public String toString() {
   
    return this==SUN?"SUN":"MON" ;  
    }
   
    public static void main(String[] args) {
    System.out.println("WeekDay1's "+WeekDay1.MON);
    System.out.println("WeekDay1's "+WeekDay1.MON.nextDay());

    System.out.println(WeekDay.MON);//查看控制台输出,有6个constructMethod1和1个constructMethod2,这是因为枚举类的所有枚举常量都是final static的
    }                    //调用枚举类的枚举常量,也就实例化了枚举类的一个实例,此时枚举类中static类型的成员首先初始化,故先有了7个输出

    public enum WeekDay {
       
        /*当枚举类有多个构造方法时,可以在枚举常量的后边加上"(int i)",‘i’为枚举类的构造方法的顺序*/
       
        SUN(),MON(1),TUE,WED,THI,FRI,SAT;
       
        /*枚举类中的‘所有’【方法】或【代码段】都必须放在‘枚举常量’的‘后边’*/  
       
        //public WeekDay(){};
        private WeekDay(){System.out.println("constructMethod1");};  //枚举类的构造方法必须为私有的
       
        private WeekDay(int x){System.out.println("constructMethod2");};
    }

    public enum TrafficLamp {
   
/*    看的懂下面的写法吗?很简单:因为‘枚举常量=枚举类的实例’;而‘枚举常量()=枚举类的实例(枚举类不同的构造函数)’,
 *      即用枚举类的不同的构造函数来定义枚举常量;而枚举常量后跟的‘{}’中内容其实是个‘匿名类’,匿名类的定义是:
 *      new 父类或接口名(){},所以下面的枚举常量的定义步骤可以分解为以下几步:
 *       1)   RED(int time) = new TrafficLamp(int time);
 *       2)   new TrafficLamp(int time){
 *                .........
 *            };
 *     
*/    RED(30){
       
        public TrafficLamp nextLamp(){
       
        return YEELOW;
        }
    },
    YEELOW(5){
       
        public TrafficLamp nextLamp(){
       
        return GREEN;
        }
       
    },
    GREEN(45){
       
        public TrafficLamp nextLamp(){
       
        return RED;
        }
       
    };
   
    private int time;
    private TrafficLamp(int time){
       
        this.time=time;
    }
    }
}

你可能感兴趣的:(泛型与枚举)