黑马程序员技术交流社区

标题: 关于枚举小疑惑? [打印本页]

作者: 冯盼    时间: 2012-12-3 22:37
标题: 关于枚举小疑惑?
刚看张老师视频中以类模拟枚举,需要写那么多代码,难道真正的枚举其实就是这么实现的么?
作者: 马海保    时间: 2012-12-3 22:57
Java 枚举7常见种用法

用法一:常量
public enum Color {  
RED, GREEN, BLANK, YELLOW  
}  
用法二:switch
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;
                }
        }
}
用法三:向枚举中添加新方法
public enum Color {
        RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4);
        // 成员变量
        private String name;
        private int index;
        // 构造方法
        private Color(String name, int index) {
                this.name = name;
                this.index = index;
        }
        // 普通方法
        public static String getName(int index) {
                for (Color c : Color.values()) {
                        if (c.getIndex() == index) {
                                return c.name;
                        }
                }
                return null;
        }
        // get set 方法
        public String getName() {
                return name;
        }
        public void setName(String name) {
                this.name = name;
        }
        public int getIndex() {
                return index;
        }
        public void setIndex(int index) {
                this.index = index;
        }
}
用法四:覆盖枚举的方法
public enum Color {
        RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 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 interface Behaviour {
        void print();
        String getInfo();
}
public enum Color implements Behaviour{
        RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4);
        // 成员变量
        private String name;
        private int index;
        // 构造方法
        private Color(String name, int index) {
                this.name = name;
                this.index = index;
        }
//接口方法
        @Override
        public String getInfo() {
                return this.name;
        }
        //接口方法
        @Override
        public void print() {
                System.out.println(this.index+":"+this.name);
        }
}
用法六:使用接口组织枚举
public interface Food {
        enum Coffee implements Food{
                BLACK_COFFEE,DECAF_COFFEE,LATTE,CAPPUCCINO
        }
        enum Dessert implements Food{
                FRUIT, CAKE, GELATO
        }
}
用法七:关于枚举集合的使用
java.util.EnumSet和java.util.EnumMap是两个枚举集合。EnumSet保证集合中的元素不重复;EnumMap中的 key是enum类型,而value则可以是任意类型。关于这个两个集合的使用就不在这里赘述,可以参考JDK文档。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2