美文网首页
enum枚举

enum枚举

作者: code_plus | 来源:发表于2017-05-30 20:08 被阅读0次

    关键字enum可以将一组具名的值的有限集合创建为一种新的类型,而这些具名的值可以作为常规的程序组件使用。

    enum的基本特性

    创建enum时,编译器会生成一个相关的类,这个类继承自java.lang.Enum。

    常用方法

    values()

    返回enum实例的数组,用于遍历enum实例。这个方法不存在于java.lang.Enum。是编译器添加的一个静态方法。功能上与Class中getEnumConstants()方法相同。

    == 和equals()

    相等比较

    compareTo()

    实现Comparable接口

    name()和toString()

    返回enum实例值的字符串表示

    valueOf()

    根据名字返回enum实例

    java.lang.Enum

    所有的枚举类型都会继承Enum,结构如下

    enum.png
    • name为枚举类型声明时的名字
    • ordinal为枚举实例声明的次序,从0开始

    自定义方法

    enum可以看做是一种类。enum类型不能继承,因为枚举都继承自java.lang.Enum,也不能被继承,因为会被编译成final类。可以向enum类型中添加方法。

    public enum OzWitch {
        WEST("WEST description"),
        NORTH("NORTH description");
    
        private String description;
    
        OzWitch(String description) {
            this.description = description;
        }
        public String getDescription(){
            return description;
        }
        @Override
        public String toString(){
            return name().toLowerCase();
        }
    
        public static void main(String[] args){
            for (OzWitch ozWitch : OzWitch.values()){
                System.out.println(ozWitch);
                System.out.println(ozWitch.getDescription());
            }
        }
    }
    

    上面的例子为枚举类型修改了构造方法,同时添加了两个方法。其中构造方法不能是public。当然也可以覆盖枚举类型的方法。

    实现接口

    enum实例不能继承,但是可以实现接口。

    switch语句中使用enum

    switch中只能使用整数值,而枚举实例本身就具有整数值的次序。

    常量方法

    实现常量方法,需要为enum定义abstract方法,然后为每个实例实现该抽象方法。

    public enum Shrubbery {
        GROUND {
            String getInfo() {
                return name().toLowerCase();
            }
        },
        CRAWLING {
            String getInfo() {
                return name().toLowerCase();
            }
        },
        HANGING {
            String getInfo() {
                return name().toLowerCase();
            }
        };
        abstract String getInfo();
        
        public static void main(String[] args){
            for (Shrubbery shrubbery : Shrubbery.values()){
                System.out.println(shrubbery.getInfo());
            }
        }
    }
    

    enum类型编译

    下面为enum Shrubbery编译之后的代码。编译之后为final类。继承自java.lang.Enum。Shrubbery中的值均为Shrubbery类型的static final 实例。编译器添加了两个方法,分别是values()和valueOf()

    public final class Shrubbery extends java.lang.Enum<Shrubbery> {
      public static final Shrubbery GROUND;
      public static final Shrubbery CRAWLING;
      public static final Shrubbery HANGING;
      public static Shrubbery[] values();
      public static Shrubbery valueOf(java.lang.String);
      static {};
    }
    
    

    EnumSet

    基于enum的set

    EnumMap

    基于enum的map

    相关文章

      网友评论

          本文标题:enum枚举

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