Java 枚举enum是一个特殊的类,一般表示一组相关常量,一年四季、多种颜色、星期等。并且可以提供比常量更多的方法。
特点:
- 真正的final类,客户端不能创建实例,不能扩展。只有声明过的枚举常量。
- 保证编译安全。不能将一种枚举类型表达式赋值给另外一种枚举类型变量。不能通过==比较不同枚举类型的值
- 不同枚举类型有自己的命名空间,不同枚举类型可以有同名常量。
- 可以添加方法、域或实现任意的接口。
例:
- switch语句
public enum Operation{
PLUS("+"), SUB("-"), MULTIPLY("*"), DIVIDE("/");
public double apply(double x,double y){
switch (this){
case PLUS:return x+y;
case SUB :return x-y;
case MULTIPLY:return x*y;
case DIVIDE:return x/y;
default:return -1;
}
}
private final String str;
Operation(String str) {this.str=str; }
//覆盖方法
@Override
public String toString() { return str; }
}
- 具体方法覆盖常量抽象apply方法,以便添加新常量时,编译器会提醒实现新常量特定方法。
public class ENUM {
public enum Operation{
PLUS("+"){
public double apply(double x,double y){return x+y;}
},
SUB("-"){
public double apply(double x,double y){return x-y;}
},
MULTIPLY("*"){
public double apply(double x,double y){return x*y;}
},
PDIVIDE("/"){
public double apply(double x,double y){return x/y;}
};
private final String str;
Operation(String str) {this.str=str; }
//覆盖方法,返回操作符号
@Override
public String toString() { return str; }
//抽象方法
public abstract double apply(double x,double y);
}
public static void main(String[] args) {
double x=3.14;
double y=4.13;
for(Operation op:Operation.values()){
System.out.println(x+""+op+""+y+"="+op.apply(x,y));
}
}
}
输出结果
3.14+4.13=7.27
3.14-4.13=-0.9899999999999998
3.14*4.13=12.9682
3.14/4.13=0.7602905569007264