• java枚举


    枚举   实现内部对象的多例

          enum关键  相当于继承Enum抽象类

          枚举中的构造方法不能是public

         枚举对象放到第一行

         枚举可以实现接口

         枚举不可以继承其他类

       

    /** 
         * 常用类型(带参数的枚举常量,这个只是在书上不常见,实际使用还是很多的,看懂这个,使用就不是问题啦。) 
         */  
        private enum TYPE {  
            FIREWALL("firewall"),  
            SECRET("secretMac"),  
            BALANCE("f5");  
      
            private String typeName;  
      
            TYPE(String typeName) {  
                this.typeName = typeName;  
            }  
      
            /** 
             * 根据类型的名称,返回类型的枚举实例。 
             * 
             * @param typeName 类型名称 
             */  
            public static TYPE fromTypeName(String typeName) {  
                for (TYPE type : TYPE.values()) {  
                    if (type.getTypeName().equals(typeName)) {  
                        return type;  
                    }  
                }  
                return null;  
            }  
      
            public String getTypeName() {  
                return this.typeName;  
            }  
        }  

    实现接口

    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;
            }  
        //接口方法  
            public String getInfo(){  
                return this.name;
            }  
            //接口方法  
            public void print() {  
                System.out.println(this.index+":"+this.name);  
            }  
            
            
            public static void main(String[] args) {
                Behaviour behaviour = Color.GREEN;
                behaviour.print();
            }
        }  

    内部类形式方法

    public enum Color implements Behaviour{  
            RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4){
                public void print() {  
                    System.out.println("黄色自己的打印方法");  
                } 
            };  
            // 成员变量  
            private String name;  
            private int index;  
            // 构造方法  
            private Color(String name, int index) {  
                this.name = name;  
                this.index = index;
            }  
        //接口方法  
            public String getInfo(){  
                return this.name;
            }  
            //接口方法  
            public void print() {  
                System.out.println(this.index+":"+this.name);  
            }  
            
            
            public static void main(String[] args) {
                Behaviour behaviour = Color.YELLO;
                behaviour.print();
            }
        }  

    枚举类中可以定义抽象方法,但是每个枚举对象都要重写抽象方法

    public interface Plant {
        enum Vegetable implements INumberEnum {
            POTATO(0, "土豆"),
            TOMATO(0, "西红柿");
    
            Vegetable(int number, String description) {
                this.code = number;
                this.description = description;
            }
    
            private int code;
            private String description;
    
            @Override
            public int getCode() {
                return 0;
            }
    
            @Override
            public String getDescription() {
                return null;
            }
        }
    
        enum Fruit implements INumberEnum {
            APPLE(0, "苹果"),
            ORANGE(0, "桔子"),
            BANANA(0, "香蕉");
    
            Fruit(int number, String description) {
                this.code = number;
                this.description = description;
            }
    
            private int code;
            private String description;
    
            @Override
            public int getCode() {
                return 0;
            }
    
            @Override
            public String getDescription() {
                return null;
            }
        }
    }
    
    例:在类中组织 enum
    
    本例和上例效果相同。
    
    public class Plant2 {
        public enum Vegetable implements INumberEnum {...}  // 省略代码
        public enum Fruit implements INumberEnum {...} // 省略代码
    }
    EnumSet和EnumMap
    
    Java 中提供了两个方便操作enum的工具类——EnumSet 和 EnumMap。
    
    EnumSet 是枚举类型的高性能 Set 实现。它要求放入它的枚举常量必须属于同一枚举类型。
    EnumMap 是专门为枚举类型量身定做的 Map 实现。虽然使用其它的 Map 实现(如HashMap)也能完成枚举类型实例到值得映射,但是使用 EnumMap 会更加高效:它只能接收同一枚举类型的实例作为键值,并且由于枚举类型实例的数量相对固定并且有限,所以 EnumMap 使用数组来存放与枚举类型对应的值。这使得 EnumMap 的效率非常高。
    
    // EnumSet的使用
    System.out.println("EnumSet展示");
    EnumSet<ErrorCodeEn> errSet = EnumSet.allOf(ErrorCodeEn.class);
    for (ErrorCodeEn e : errSet) {
        System.out.println(e.name() + " : " + e.ordinal());
    }
    
    // EnumMap的使用
    System.out.println("EnumMap展示");
    EnumMap<StateMachine.Signal, String> errMap = new EnumMap(StateMachine.Signal.class);
    errMap.put(StateMachine.Signal.RED, "红灯");
    errMap.put(StateMachine.Signal.YELLOW, "黄灯");
    errMap.put(StateMachine.Signal.GREEN, "绿灯");
    for (Iterator<Map.Entry<StateMachine.Signal, String>> iter = errMap.entrySet().iterator(); iter.hasNext();) {
        Map.Entry<StateMachine.Signal, String> entry = iter.next();
        System.out.println(entry.getKey().name() + " : " + entry.getValue());
    }
  • 相关阅读:
    海涛老师的面试题作业12打印从1到最大的n位数
    海涛老师的面试题作业28字符串的排列组合问题。
    二叉堆 算法基础篇(一)
    海涛老师的面试题作业5从尾到头打印链表
    关于C++访问控制的理解
    关于STL优先级队列的一些应用
    海涛老师的面试题作业27二叉搜索树与双向链表
    编程之美快速找出满足条件的两个数课后题
    Effective C++ C++虚函数默认参数机制
    变位词程序的设计与实现编程珠玑第二章读后感
  • 原文地址:https://www.cnblogs.com/jentary/p/13038145.html
Copyright © 2020-2023  润新知