Java Enum

作者: 杰哥长得帅 | 来源:发表于2018-03-29 21:42 被阅读8次

    Enum 类的声明:

    public abstract class Enum<E extends Enum<E>>
            implements Comparable<E>, Serializable
    

    枚举也是类,一个枚举可以拥有成员变量,成员方法,构造方法。先来看枚举最基本的用法:

    enum Type {
        A, B, C, D;
    }
    

    创建 enum 时,编译器会自动为我们生成一个继承自 java.lang.Enum 的类,上面的 enum 可以简单看作:

    class Type extends Enum {
        public static final Type A;
        public static final Type B;
        ...
    }
    

    对于上面的例子,可以把 Type 看作一个类,而把 A,B,C,D 看作类的 Type 的实例

    “类”方法和“实例”方法

    在 enum 中,我们可以定义类和实例的变量以及方法:

    enum Type {
        A, B, C, D;
    
        static int value;
        public static int getValue() {
            return value;
        }
    
        String type;
        public String getType() {
            return type;
        }
    }
    

    在原有的基础上,添加了类方法和实例方法。把 Type 看做一个类,那么 enum 中静态的域和方法,都可以视作类方法。和调用普通的静态方法一样,这里调用类方法也是通过 Type.getValue() 即可调用,访问类属性也是通过 Type.value 访问

    下面的是实例方法,也就是每个实例才能调用的方法。那么实例是什么呢?没错,就是 A,B,C,D。所以调用实例方法,也就是通过 Type.A.getType() 来调用

    最后,对于某个实例而言,还可以实现自己的实例方法:

    enum Type {
        A {
            public String getType() {
                return "I will not tell you";
            }
        }, B, C, D;
    
        static int value;
        public static int getValue() {
            return value;
        }
    
        String type;
        public String getType() {
            return type;
        }
    }
    

    这里,A 实例后面的 {…} 就是属于 A 的实例方法,可以通过覆盖原本的方法,实现属于自己的定制
    除此之外,还可以添加抽象方法在 enum 中,强制 ABCD 都实现各自的处理逻辑:

    enum Type {
        A {
            @Override
            public String getType() {
                return "A";
            }
        }, B {
            @Override
            public String getType() {
                return "B";
            }
        }, C {
            @Override
            public String getType() {
                return "C";
            }
        }, D {
            @Override
            public String getType() {
                return "D";
            }
        };
    
        public abstract String getType();
    }
    

    相关文章

      网友评论

          本文标题:Java Enum

          本文链接:https://www.haomeiwen.com/subject/rvpvcftx.html