Java中的枚举是一种类型,顾名思义:就是一个一个列举出来。所以它一般都是表示一个有限的集合类型,它是一种类型
来源维基百科:在数学和计算机科学理论中,一个集的枚举是列出某些有穷序列集的所有成员的程序,或者是一种特定类型对象的计数。这两种类型经常(但不总是)重叠。 [1] 是一个被命名的整型常数的集合,枚举在日常生活中很常见,例如表示星期的SUNDAY、MONDAY、TUESDAY、WEDNESDAY、THURSDAY、FRIDAY、SATURDAY就是一个枚举。
根据以往定义常量是这样子的,如下(这种方法称作int枚举模式,存在着许多不足的地方,而且在类型安全性和使用方便性方面没有任何帮助)
public static final int FUJI = 0;
public static final int PIPPIN = 1;
public static final int GRANNY_SMITH = 2;
而使用枚举类可以定义为如下所示:
public enum Apple {
FUJI,
PIPPIN,
GRANNY_SMITH
}
枚举类型背后的基本想法非常简单:它们是通过共有的静态final域为每个枚举常量导出实例的类。因为没有可以访问的构造器,枚举类型是真正的final类型
我们可以试下switch语句来尝试一下,先写一个静态方法
public static void doing(Apple apple){ //这里的Apple使用的是上面刚刚定义的枚举类
switch (apple){
case FUJI:
System.out.println("this is fuji");
break;
case PIPPIN:
System.out.println("this is pippin");
break;
case GRANNY_SMITH:
System.out.println("this is granny_smith");
break;
}
}
public static void main(String[] args) {
doing(Apple.FUJI);
}
打印结果为 “this is fuji”,看起来好像挺简单的,而且代码也简化不少
再写个简单计算器的例子:
定义一个加减乘除的方法
public enum CAL{
PLUS {double apply(double x,double y){return x + y;}},
MINUS {double apply(double x,double y){return x - y;}},
TIMES {double apply(double x,double y){return x * y;}},
DIVIDE {double apply(double x,double y){return x / y;}};
abstract double apply(double x,double y);
}
然后我们在main方法中使用我们定义的枚举类方法
public static void main(String[] args) {
System.out.println(CAL.PLUS.apply(1,2));
}
打印结果为 3.0