先来一段常用枚举类代码结构
public enum Color { //枚举对象 RED(1,"红色"),GREEN(2,"绿色"),BLUE(3,"蓝色"); //私有成员属性 private int index; private String name; //私有构造方法 private Color(int index, String name) { this.index = index; this.name = name; } //公共的get方法 public int getIndex() { return index; } public String getName() { return name; } //获取某实例的静态方法 public static Color getInstance(int num) { Color[] values = Color.values(); for(Color c : values) { if(c.getIndex() == num) { return c; } } throw new IllegalArgumentException("没有这种颜色"); } }
从上面的代码中可以看出枚举的常用结构为:1.枚举实例对象,2.如果有属性就添加私有成员变量。3.构造方法为私有的,防止再创建其他实例对象。4.只有get方法,防止修改原对象的属性值。5,其他方法,比如根据某个属性获取对象实例
下面再深入看看枚举类中一些隐藏的东西
1.枚举类都隐式的继承自java.util.Enum类,如果你显示的继承则无效
2.枚举类中都有一些基本的方法,包括
values()
:返回enum实例的数组,而且该数组中的元素严格保持在enum中声明时的顺序。
name()
:返回实例名。
ordinal()
:返回实例声明时的次序,从0开始。
getDeclaringClass()
:返回实例所属的enum类型。
equals()
:判断是否为同一个对象。
compareTo():比较方法,因为Enum类实现了Comparable和
Serializable接口
看如下代码
枚举类
public enum Color { RED,GREEN,BLUE,YELLOW,ORANGE; }
测试类
public class EnumTest { public static void main(String[] args) { Color[] values = Color.values(); for(Color c :values) { System.out.print(c.name()+"---"); System.out.print(c.ordinal()+"---"); System.out.println(c.getDeclaringClass()); } } }
测试结果
RED---0---class com.pancras.test.Color GREEN---1---class com.pancras.test.Color BLUE---2---class com.pancras.test.Color YELLOW---3---class com.pancras.test.Color ORANGE---4---class com.pancras.test.Color
还有其他更多用法等你来发现
参考资料:https://www.cnblogs.com/jingmoxukong/p/6098351.html