枚举enum

enum的values方法

此方法可以将枚举类转变为一个枚举类型的数组,因为枚举中没有下标,我们没有办法通过下标来快速找到需要的枚举类,这时候,转变为数组之后,我们就可以通过数组的下标,来找到我们需要的枚举类。

test

public enum EnumDemoFirst { 
  RED(1,"hongse"),GREEN(2,"lvse"),YELLOW(3,"huangse"); 
  private int code; 
  private String msg; 

  private EnumDemoFirst(int ordinal, String name) { 
    this.code = ordinal; 
    this.msg = name; 
  } 
  public int getCode() { 
    return code; 
  } 
  public void setCode(int code) { 
    this.code = code; 
  } 
  public String getMsg() { 
    return msg; 
  } 
  public void setMsg(String msg) { 
    this.msg = msg; 
  }     
} 

测试方法:

public class EnumTest { 
  public static void main(String[] args) { 
    EnumDemoFirst[] values = EnumDemoFirst.values(); 
    for (EnumDemoFirst enumDemoFirst : values) { 
      System.out.println(enumDemoFirst + "--" + enumDemoFirst.getCode() + "--" + enumDemoFirst.getMsg()); 
      System.out.println("============="); 
    } 
  } 
}

// output
RED--1--hongse 
============= 
GREEN--2--lvse 
============= 
YELLOW--3--huangse 
=============

分析

尝试点击values方法,却是没有反应的。

The enum declaration defines a class (called an enum type). The enum class body can include methods and other fields. The compiler automatically adds some special methods when it creates an enum. For example, they have a static values method that returns an array containing all of the values of the enum in the order they are declared. This method is commonly used in combination with the for-each construct to iterate over the values of an enum type.

首先,enum声明实际上定义了一个类。因此我们可以通过定义的enum调用其方法。其次,Java编译器会自动在enum类型中插入一些方法,其中就包括values方法——所以我们的程序在没编译的时候,自然没法查看values方法的源码了。

enum是一个什么类呢?

All enums implicitly extend java.lang.Enum. Because a class can only extend one parent (see Declaring Classes), the Java language does not support multiple inheritance of state (see Multiple Inheritance of State, Implementation, and Type), and therefore an enum cannot extend anything else.

原来,这个枚举实际上是由java.lang.Enum这个类实现的,在程序中定义的枚举类型,都会隐式继承此类。并且,由于java中的继承是单继承,所以我们定义的枚举就无法在继承其他类了。

通过javap命令,反编译.class文件查看其中的内容可以看到编译器给我们插入的value方法。


   转载规则


《枚举enum》 锦泉 采用 知识共享署名 4.0 国际许可协议 进行许可。
  目录