美文网首页
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

相关文章

  • swift3语法(八)

    枚举/结构体 枚举 定义形式enum 枚举名 { 枚举值} // 例如enum CompassPoint {...

  • Rust 编程语言-6-枚举和模式匹配

    6. Enum和Pattern matching 6.1 Enum枚举 IP地址枚举 消息类型枚举:可以看到枚举中...

  • 菜鸡学Swift3.0 12.枚举

    1. 枚举定义 enum 定义枚举类型 { case 枚举项 ... } 2.原始值 rawValue enum...

  • Swift Day03 枚举 可选项

    一、枚举 1. 枚举(enum)的基本写法? 2. 枚举(enum)的关联值(Associated Value)?...

  • Python_枚举

    一、枚举 Enum类 Python中所有枚举类型都是enum模块下的Enum类的子类。 枚举中的标识最好全部使用大...

  • 枚举学习

    java enum枚举类 enum(枚举)类介绍 **java枚举类是一组预定义常量的集合,使用enum关键字声明...

  • OC中枚举写法 以及 字符串类型枚举实现探索

    常见枚举写法 C语言模式的枚举写法:enum 普通【整型】枚举写法 :NS_ENUM 位移枚举 :NS_OPTIO...

  • 枚举: 使用小汇总

    枚举enum是同class,interface同一级别的特性。 枚举enum不能被继承。 枚举示例: 有人说枚举就...

  • 枚举

    枚举 wiki Java的枚举类型用法介绍 深入理解Java枚举类型(enum) 为什么要用enum? 学习计划 ...

  • Java枚举

    枚举 普通方式定义(int枚举模式) 枚举方式 Enum抽象类常见方法 Enum是所有 Java 语言枚举类型的公...

网友评论

      本文标题:enum枚举

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