enum基本用法
1.enum在这样使用时分号不是必须的。
public enum Season{
SPRING,SUMMER,AUTUMN,WINTER
}
2.enum在使用时,会创建 ordinal() 方法,该方法会标明枚举常量的声明顺序。还会生成 static values() 方法,会按照顺序返回常量值组成的数组:
public static void main(String[] args){
for(Season s:Season.values()){
println(s.ordinal()+s);
}
}
enum还可以用于switch,通常switch语句只能使用数值。
3.enum可以用于单例模式:
public enum Singleton{
INSTANCE;
...
}
这种方式是实现单例模式的最佳方法
enum中的重写
enum可以看成是一个类,可以对enum中的类进行重写,也可以对其构造方法进行重写。
public enum Operation{
//mSymbol赋值“+”,apply()重写为求和
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}},
private final String mSymbol;
Operation(String symbol){
mSymbol=symbol;
}
@override
public String toString(){return mSymbol;}
abstract double apply(double x,double y);
}
这样定义中,对Operation的构造方法和apply()方法都进行了重写,调用的效果为:
Operation.PLUS.apply(3,4);==========>7
Operation.PLUS;=============>"+"
二重分类
当一种分类完成后,枚举类型又可以按另一种分类方式分类时:
enum Day{
MONDAY(WorkDay.WEEKDAY),
TUESDAY(WorkDay.WEEKDAY),
WEDNESDAY(WorkDay.WEEKDAY),
...
SUNDAY(WorkDay.WEEKEND);
private final DayType mDt;
Day(DayType dt){
mDt=dt;
}
dowhat(){
mDt.dowhat();
}
private enum DayType{
WEEKDAY{void doWhat(){System.out.println("work")}},
WEEKEND{void doWhat(){System.out.println("have fun")}};
abstract void doWhat();
}
}
由值得到enum
enum MyEnum {
ENUM_1("A"),
ENUM_2("B");
private String name;
private static final Map<String,MyEnum> ENUM_MAP;
MyEnum (String name) {
this.name = name;
}
public String getName() {
return this.name;
}
// Build an immutable map of String name to enum pairs.
// Any Map impl can be used.
static {
Map<String,MyEnum> map = new ConcurrentHashMap<String, MyEnum>();
for (MyEnum instance : MyEnum.values()) {
map.put(instance.getName(),instance);
}
ENUM_MAP = Collections.unmodifiableMap(map);
}
public static MyEnum get (String name) {
return ENUM_MAP.get(name);
}
}
版权声明:本文为qq_38237213原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。