其实我们使用到枚举的地方还是很多的,其实我们可以完全人工的来实现枚举的功能。比如说我现在手里的项目我就是自己实现的枚举,说白了,枚举就是一个类的多例模式。
1,使用enum声明,默认直接继承了java.lang.Enum类,而不是Object类;
2,枚举类的对象是固定的,实例个数有限,枚举对象后可以跟();跟着()的意思就是在调用相关的构造器,要是不写的话就是在调用默认的构造器。
3,枚举元素必须位于枚举类体中的最开始部分,枚举元素后要有分号与其他成员分隔;
/** * * @version 1L * @author LinkinPark * @since 2014-11-2 * @motto 梦似烟花心似水,同学少年不言情 * @desc ^使用enum定义,非抽象的枚举类默认会使用final修饰,因此枚举类不能派生子类 */ public enum SeasonEnum { //在这里要列出4个枚举实例 //注意了:枚举类的所有实例必须在枚举类的第一行显式列出,否则这个枚举永远不能产生实例 SPRING,SUMMER,FALL,WINTER;//默认添加 public static final //枚举类的构造器还能使用private访问控制符,默认也是使用private修饰的构造器 private SeasonEnum(){ } public static void test(SeasonEnum s){ switch(s){ case SPRING: System.out.println("春天。。。"); break; case SUMMER: System.out.println("夏天。。。"); break; case FALL: System.out.println("秋天。。。"); break; case WINTER: System.out.println("冬天。。。"); break; } } public static void main(String[] args) { for(SeasonEnum s:SeasonEnum.values()){ System.out.println(s); } SeasonEnum.test(SeasonEnum.SPRING); } }
b.在枚举匿名内部类对象中实现接口抽象方法;
public enum Gender { MALE("男","这里是男的"),FEMALE("女","这里是女的"); //其实也可以不用枚举的 ,定义一个抽象类继承Enum,之后再继承这个抽象类,定义2个方法分别来获得下面的2个属性 //public static final Gender MALE = new Gender("男","这里是男的"); private final String name; private final String lable; private Gender(String name,String lable){ this.name = name; this.lable = lable; } public String getName(){ return this.name; } public String getLable(){ return this.lable; } //可以到的上面构造器中传入的2个字符串的 public static void main(String[] args) { System.out.println(Gender.MALE.getName()); System.out.println(Gender.MALE.getLable()); } }
1,在枚举类中实现接口的抽象方法;
2,在枚举匿名内部类中实现接口的抽象方法;
//实现接口的枚举 public enum Linkin implements GenderDesc{ MALE("男"),FEMALE("女"); private String name; @Override public void show() { System.out.println("这里是一个用于定义性别属性的方法。。。"); } private Linkin(String name){ this.name = name; } public String getName(){ return this.name; } } interface GenderDesc{ void show(); }
<pre name="code" class="java">//实现接口的枚举 //让每个枚举类在调用方法时呈现出不同的行为方式 public enum Linkin implements GenderDesc{ //MALE FEMALE 实际上是Linkin匿名子类的实例 MALE("男"){ public void show() { System.out.println("这里创建的是男的实例。。。"); } },FEMALE("女"){ public void show() { System.out.println("这里创建的是女的实例。。。"); } }; private String name; private Linkin(String name){ this.name = name; } public String getName(){ return this.name; } } interface GenderDesc{ void show(); }
public enum Linkin{ PLUS{ public double eval(double x,double y){ return x+y; } }, MINUS{ public double eval(double x,double y){ return x-y; } }, TIMES{ public double eval(double x,double y){ return x*y; } }, DIVIDE{ public double eval(double x,double y){ return x/y; } }; abstract public double eval(double x,double y); public static void main(String[] args) { System.out.println(Linkin.PLUS.eval(1, 1)); System.out.println(Linkin.MINUS.eval(1, 1)); System.out.println(Linkin.TIMES.eval(1, 1)); System.out.println(Linkin.DIVIDE.eval(1, 1)); } }
——来自《Effective Java》(作者:Josh Bloch)
enum Singleton { INSTANCE;//唯一实例 public void print(){ System.out.println("使用enum实现单例模式"); } public static Singleton getInstance(){ return INSTANCE; } }