java枚举

java枚举

为什么要定义枚举?

问题:要定义星期几或性别的变量,该怎么定义?假设用1-7分别表示星期一到星期日,但有人可能会写成int weekday = 0;

枚举就是要让某个类型的变量的取值只能为若干个固定值中的一个,否则,编译器就会报错,枚举可以让编译器在编译时就可以控制程序中填写的非法值,普通变量的方式在开发阶段无法实现这一目标。

用普通类来模拟枚举类型的定义,定义一个Weekday的类来模拟枚举功能。

》私有的构造方法

》每个元素分别用一个公有的静态成员变量来表示

》可以有若干个公有方法或抽象方法。例如要提供nextday的方法必须是抽象方法。采用抽象方法定义nextDay就将大量的if else语句转移成一个个独立的类。

如果想在一个类中编写完各个枚举类和测试调用类,那么可以将枚举定义或调用类的内部类。

public enum Position {

      BOSS(6) {

           @Override

           public Position next() {

                 return PROGRAMMER;

           }

      },

      PROGRAMMER {

           @Override

           public Position next() {

                 return MANAGER;

           }

      },

      MANAGER(){

           @Override

           public Position next() {

           return null;

           }   

      } ;

      Position() {}

      Position(int i) {}

      public abstract Position next()

}

 

模拟实现:

public abstract class Xiebie {

     

      public static final Xiebie NAN = new Xiebie(){

           public Xiebie next() {

                 return NV;

           }

      };

     

      public static final Xiebie NV = new Xiebie() {

           public Xiebie next() {

                 return NAN;

           }

      };

     

      public abstract Xiebie next();

     

      @Override

      public String toString() {

           return (this == NAN) ? "nan" : "nv";

      }

 

      public static void main(String[] args) {

           Position p = Position.BOSS;

           System.out.println(p);

           System.out.println(p.name());

           System.out.println(p.ordinal());

           System.out.println(Position.valueOf("BOSS").toString());

           System.out.println(Position.valueOf(Position.class, "BOSS"));

           Position[] pos = Position.values();

           System.out.println("----------------------");

           for (Position ps : pos) {

                 System.out.println(ps);

           }

           System.out.println(p.next());

      }

}

枚举只有一个成员时,就可以作为一种单例的实现方式。

你可能感兴趣的:(java,manager,String,null,Class,编译器)