1 package com.enums.jun; 2 3 public enum EnumTest { 4 5 A("春"),B("夏"),C("秋"),D("冬"); 6 7 private final String name; 8 9 private EnumTest(String name){ 10 this.name = name; 11 } 12 13 public String getName() { 14 return name; 15 } 16 17 }
1 package com.enums.jun; 2 3 4 public class EnumTests { 5 6 public static void main(String[] args) { 7 // TODO Auto-generated method stub 8 int valueOf = EnumTest.B.ordinal(); 9 System.out.println(valueOf); 10 int valueOf1 = EnumTest.D.ordinal(); 11 System.out.println(valueOf1); 12 } 13 14 }
1 package enumcase; 2 3 public enum Operation { 4 PLUS{ 5 6 @Override 7 public double eval(double x, double y) { 8 return x + y; 9 } 10 11 }, 12 MINUS{ 13 14 @Override 15 public double eval(double x, double y) { 16 return x - y; 17 } 18 19 }, 20 TIMES{ 21 22 @Override 23 public double eval(double x, double y) { 24 return x * y; 25 } 26 27 }, 28 DIVIDE{ 29 30 @Override 31 public double eval(double x, double y) { 32 return x / y; 33 } 34 35 }; 36 37 /** 38 * 抽象方法,由不同的枚举值提供不同的实现。 39 * @param x 40 * @param y 41 * @return 42 */ 43 public abstract double eval(double x, double y); 44 45 public static void main(String[] args) { 46 System.out.println(Operation.PLUS.eval(10, 2)); 47 System.out.println(Operation.MINUS.eval(10, 2)); 48 System.out.println(Operation.TIMES.eval(10, 2)); 49 System.out.println(Operation.DIVIDE.eval(10, 2)); 50 } 51 }
简单说:枚举可以限定取值范围,所有的内容只能从指定范围中取得.
比如性别,只有男和女,其他值都是不合法的
如果不用枚举也可以构造这样的方法,但可能要做更多的工作,也可能不安全
但运用枚举,就可以避免这些问题了
个人理解就是:对于现实中的一些常识或自己在设计中有不需要改变一类对象的属性,某类对象的属性,方法是可数且可知的,我们不需要对其进行改变的,就可以用这种方法去定义该类。用法:对类封装固定对象,其中的对象是有限的,属性可以固定设置,比如描写一个星期的类,从星期一到星期天,可以对星期一设一个英语属性为Monday,是一个星期中的第一天,星期二为Tuesday,是一个星期的第二天,依此可设置完其他五天,这样,封装星期的这个类就很明了,实用了