Java学习笔记—枚举

tech2024-11-18  18

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); } }
最新回复(0)