你真的懂枚举吗

enum关键字与class和interface地位相同,其同样有成员变量、方法、能够实现一个或多个接口,也能够有构造器
vue

枚举类与普通类的区别

  • 枚举类的父类是java.lang.Enum类
  • 非抽象枚举类默认使用final修饰,不能存在子类
  • 枚举类的构造器只能使用private修饰符,默认就是private
  • 枚举类的全部实例必须在枚举类的第一行显式列出,不然这个枚举类永远不能产生实例,列出的实例,系统会自动添加public static final修饰

    抽象的枚举类,系统默认使用abstract修饰,而不用final修饰java

package com.em;public enum EmFestival {    //会产生以下四个实例
    SPRING,SUMMER,FALL,WINTER;
}

枚举值就表明可能会产生的实例vuex

package com.em;public class FestivalTest {    public static String jude(EmFestival v){        switch (v) {        case SPRING:            return "春天";        case SUMMER:            return "夏天";        case FALL:            return "秋天";        case WINTER:            return "冬天";
        }        return null;
    }    public static void main(String[] args) {
        System.out.println(jude(EmFestival.SPRING));
    }
}

为何使用枚举类?

  • 存在命名空间,能够将其余的静态常量区分开
  • 打印输出的意义明确,不想普一般量那样,都用数字表示含义,没法直接表达含义

    枚举类方法

  • compare(E o):用于与指定的枚举对象比较顺序,同一个枚举实例只能与相同类型的枚举实例进行比较。若是该枚举对象位于指定枚举对象以后,则返回正整数
  • name():返回此枚举实例的名称
  • ordinal():返回枚举值在枚举类中的索引值(从0开始)
  • toString():与name方法一致,推荐使用toString
  • valueOf():一个静态方法,用于返回指定枚举类中指定名称的枚举值
package com.em;public enum EmFestival {    //会产生以下四个实例
    SPRING("春天"),SUMMER("夏天"),FALL("秋天"),WINTER("冬天");    private final String fest;    private EmFestival(String fest){        this.fest=fest;
    }    public String getFest() {        return fest;
    }

}

实现接口的枚举类

枚举类实现接口,与正常类没有什么区别微信

package com.em;import java.io.FileDescriptor;import java.io.IOException;import sun.nio.ch.SelChImpl;import sun.nio.ch.SelectionKeyImpl;public enum EmFestival implements SelChImpl{//    会产生以下四个实例
    SPRING("春天"),SUMMER("夏天"),FALL("秋天"),WINTER("冬天");    @Override
    public boolean isOpen() {        // TODO Auto-generated method stub
        return false;
    }    @Override
    public void close() throws IOException {        // TODO Auto-generated method stub

    }    @Override
    public FileDescriptor getFD() {        // TODO Auto-generated method stub
        return null;
    }    @Override
    public int getFDVal() {        // TODO Auto-generated method stub
        return 0;
    }    @Override
    public void kill() throws IOException {        // TODO Auto-generated method stub

    }    @Override
    public void translateAndSetInterestOps(int arg0, SelectionKeyImpl arg1) {        // TODO Auto-generated method stub

    }    @Override
    public boolean translateAndSetReadyOps(int arg0, SelectionKeyImpl arg1) {        // TODO Auto-generated method stub
        return false;
    }    @Override
    public boolean translateAndUpdateReadyOps(int arg0, SelectionKeyImpl arg1) {        // TODO Auto-generated method stub
        return false;
    }    @Override
    public int validOps() {        // TODO Auto-generated method stub
        return 0;
    }    private final String fest;    private EmFestival(String fest){        this.fest=fest;
    }    public String getFest() {        return fest;
    }

}

包含抽象方法的枚举类

枚举类里定义抽象方法时不能使用abstract关键字将枚举类定义成抽象类(由于系统自动会添加abastract),但由于枚举类须要显式建立枚举值,而不是做为父类,因此定义每一个枚举值时必须为抽象方法提供实现,不然出现编译错误markdown

package com.em;public enum EmFestival {    // 会产生以下四个实例
    SPRING("春天") {        @Override
        public String getFestival() {            return "春天";
        }
    },
    SUMMER("夏天") {        @Override
        public String getFestival() {            return "夏天";
        }
    },
    FALL("秋天") {        @Override
        public String getFestival() {            return "秋天";
        }
    },
    WINTER("冬天") {        @Override
        public String getFestival() {            return "冬天";
        }
    };    public abstract String getFestival();    private final String fest;    private EmFestival(String fest) {        this.fest = fest;
    }    public String getFest() {        return fest;
    }
}

更多内容能够关注微信公众号,或者访问AppZone网站app


本文分享自微信公众号 - 迹说(Lets_Talk_About)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。ide

相关文章
相关标签/搜索