enum-modifiers enum enumname:enum-base { enum-body, }
public enum SexEnum { male,female; } public enum Color { RED,BLUE,GREEN,BLACK; }之后便可以通过枚举类型名直接引用常量,如 SexEnum.male、Color.RED。
enum Signal { // 定义一个枚举类型 GREEN,YELLOW,RED } public class TrafficLight { Signal color = Signal.RED; public void change() { switch(color) { case RED: color = Signal.GREEN; break; case YELLOW: color = Signal.RED; break; case GREEN: color = Signal.YELLOW; break; } } }
方法名称 | 描述 |
---|---|
values() | 以数组形式返回枚举类型的所有成员 |
valueOf() | 将普通字符串转换为枚举实例 |
compareTo() | 比较两个枚举成员在定义时的顺序 |
ordinal() | 获取枚举成员的索引位置 |
values( ) 方法
可以将枚举的所有成员以数组形式返回,也可以通过该方法获取枚举类型的成员。enum Signal { // 定义一个枚举类型 GREEN,YELLOW,RED; } public static void main(String[] args) { for(int i = 0;i < Signal.values().length;i++) { System.out.println("枚举成员:"+Signal.values()[i]); } }输出结果如下:
枚举成员:GREEN 枚举成员:YELLOW 枚举成员:RED
valueOf() 方法
获取枚举的一个成员,再调用 compareTo() 方法进行比较,并输出结果。具体实现代码如下:
public class TestEnum { public enum Sex { // 定义一个枚举 male,female; } public static void main(String[] args) { compare(Sex.valueOf("male")); // 比较 } public static void compare(Sex s) { for(int i = 0;i < Sex.values().length;i++) { System.out.println(s + "与" + Sex.values()[i] + "的比较结果是:" + s.compareTo(Sex.values()[i])); } } }
male与male的比较结果是:0 male与female的比较结果是:-1
ordinal() 方法
可以获取一个成员在枚举中的索引位置。下面的示例创建一个包含 3 个成员的枚举类型 Signal,然后调用 ordinal() 方法输出成员及对应索引位置。public class TestEnum1 { enum Signal { // 定义一个枚举类型 GREEN,YELLOW,RED; } public static void main(String[] args) { for(int i = 0;i < Signal.values().length;i++) { System.out.println("索引" + Signal.values()[i].ordinal()+",值:" + Signal.values()[i]); } } }
索引0,值:GREEN 索引1,值:YELLOW 索引2,值:RED
enum WeekDay { Mon("Monday"),Tue("Tuesday"),Wed("Wednesday"),Thu("Thursday"),Fri("Friday"),Sat("Saturday"),Sun("Sunday"); // 以上是枚举的成员,必须先定义,而且使用分号结束 private final String day; private WeekDay(String day) { this.day = day; } public static void printDay(int i) { switch(i) { case 1: System.out.println(WeekDay.Mon); break; case 2: System.out.println(WeekDay.Tue); break; case 3: System.out.println(WeekDay.Wed); break; case 4: System.out.println(WeekDay.Thu); break; case 5: System.out.println(WeekDay.Fri); break; case 6: System.out.println(WeekDay.Sat); break; case 7: System.out.println(WeekDay.Sun); break; default: System.out.println("wrong number!"); } } public String getDay() { return day; } }
public static void main(String[] args) { for(WeekDay day : WeekDay.values()) { System.out.println(day+"====>" + day.getDay()); } WeekDay.printDay(5); }
Mon====>Monday Tue====>Tuesday Wed====>Wednesday Thu====>Thursday Fri====>Friday Sat====>Saturday Sun====>Sunday Fri
public class Test { public enum Color { RED("红色",1),GREEN("绿色",2),WHITE("白色",3),YELLOW("黄色",4); // 成员变量 private String name; private int index; // 构造方法 private Color(String name,int index) { this.name = name; this.index = index; } // 覆盖方法 @Override public String toString() { return this.index + "-" + this.name; } } public static void main(String[] args) { System.out.println(Color.RED.toString()); // 输出:1-红色 } }
EnumMap
和 EnumSet
。使用它们可以更高效地操作枚举类型。
// 定义数据库类型枚举 public enum DataBaseType { MYSQUORACLE,DB2,SQLSERVER } // 某类中定义的获取数据库URL的方法以及EnumMap的声明 private EnumMap<DataBaseType,String>urls = new EnumMap<DataBaseType,String>(DataBaseType.class); public DataBaseInfo() { urls.put(DataBaseType.DB2,"jdbc:db2://localhost:5000/sample"); urls.put(DataBaseType.MYSQL,"jdbc:mysql://localhost/mydb"); urls.put(DataBaseType.ORACLE,"jdbc:oracle:thin:@localhost:1521:sample"); urls.put(DataBaseType.SQLSERVER,"jdbc:microsoft:sqlserver://sql:1433;Database=mydb"); } //根据不同的数据库类型,返回对应的URL // @param type DataBaseType 枚举类新实例 // @return public String getURL(DataBaseType type) { return this.urls.get(type); }
方法名称 | 描述 |
---|---|
allOf(Class<E> element type) | 创建一个包含指定枚举类型中所有枚举成员的 EnumSet 对象 |
complementOf(EnumSet<E> s) |
创建一个与指定 EnumSet 对象 s 相同的枚举类型 EnumSet 对象, 并包含所有 s 中未包含的枚举成员 |
copyOf(EnumSet<E> s) |
创建一个与指定 EnumSet 对象 s 相同的枚举类型 EnumSet 对象, 并与 s 包含相同的枚举成员 |
noneOf(<Class<E> elementType) | 创建指定枚举类型的空 EnumSet 对象 |
of(E first,e...rest) | 创建包含指定枚举成员的 EnumSet 对象 |
range(E from ,E to) |
创建一个 EnumSet 对象,该对象包含了 from 到 to 之间的所有枚 举成员 |
for(Operation op:EnumSet.range(Operation.PLUS,Operation.MULTIPLY)) { doSomeThing(op); }
本文链接:http://task.lmcjl.com/news/10907.html