java枚举类详解
?? JDK1.6增添了一些新的特性,其中枚举就是其中比较重要的一种最新的特性。下面这篇文章来详细谈谈java枚举类的原理和应用。
先用普通的java类来模拟一下枚举类。在做web应用的时候经常需要进行权限控制,比如一个系统有“普通会员”,“管理员”,“超级管理员”这三个权限,这个系统是由一组开发人员共同来设计,一些新晋的程序员可能并不知道这三个权限的具体名称,为了省去程序员之间相互询问的麻烦,可以很好的用下面的设计来确保每位程序员只能使用事先定义好的三种权限,否则将通不过编绎器的法眼。
package net.csdn.blog;public abstract class AccessControll {public static final AccessControll MEMBER = new AccessControll() {public String toString() {return "普通会员";}};public static final AccessControll ADMIN = new AccessControll() {public String toString() {return "管理员";}};public static final AccessControll SUPERADMIN = new AccessControll() {public String toString() {return "超级管理员";}};public abstract String toString();}在外部的程序员如果需要选择用户的权限时可以按照下面的方法做
package net.csdn.blog;public class EnumTest {public static void main(String[] args) {AccessControll memeber=AccessControll.MEMBER;AccessControll admin=AccessControll.ADMIN;AccessControll superadmin=AccessControll.SUPERADMIN;System.out.println(memeber);System.out.println(admin);System.out.println(superadmin);}}自从有了java枚举类之后,就不再需要我们自己去写一个诸如AccessControll这样的类了,可以直接用枚举类来进行权限范围的控制,如EnumAccessControll.java所示
package net.csdn.blog;public enum EnumAccessControll {MEMBER("普通会员"),ADMIN("管理员"),SUPERADMIN("超级管理员");//枚举元素列表private String name;private EnumAccessControll(String name){this.name=name;}public String toString(){return name;}}使用枚举类有几个要注意得地方:
枚举类中常见方法
枚举类的“不同寻常之处”
枚举类可以作为在switch语句中作为分支结构的条件使用,如下例所示。
package net.csdn.blog;public class SwitchEnum {public static void main(String args[]) {sysEnum(EnumAccessControll.SUPERADMIN);}public static void sysEnum(EnumAccessControll eac) {switch (eac) {case MEMBER:System.out.println("我的权限为普通员工");break;case ADMIN:System.out.println("我是管理员");break;case SUPERADMIN:System.out.println("我是超级管理员");break;}}}足够复杂的一个枚举类HardEnum.java
?
package net.csdn.blog;public enum HardEnum {RED("红灯") {public HardEnum nextLamp() {return HardEnum.valueOf("YELLOW");}},YELLOW("黄灯") {public HardEnum nextLamp() {return HardEnum.valueOf("GREEN");}},GREEN("绿灯") {public HardEnum nextLamp() {return HardEnum.valueOf("RED");}},UNKNOW {public HardEnum nextLamp() {if (this.ordinal() + 1 != this.values().length)return this.values()[this.ordinal() + 1];elsereturn this.values()[0];}};private String name;public abstract HardEnum nextLamp();private HardEnum() {name = "未知";};private HardEnum(String n) {name = n;}}?由此,java枚举类的特性就介绍完了,相信大家也对java的枚举类有了一定的了解了.
?
?