跳至主要內容

Java

LincZero大约 1 分钟

Java

目录

枚举类

API: java.lang.Enum<E>5.0

基本使用

enum Size { SMALL, MEDIUM, LARGE, EXTRA_LARGE };  // 其实是一个类
Size s = Size.MEDIUM;

// /如果需要的话,可以在枚举类型中添加一些构造器、方法和域。当然,构造器只是在构造枚举常量的时候被调用
public enum Size
{
    SMALL("S"), MEDIUM("M"), LARGE("L"), EXTRA_LARGE("XL");
        
    private String abbreviation;
    
    private Size(String abreviation) {this.abbreviation = abbreviation;}
    public String getAbbreviation() {return abbreviation;}
}

在比较两个枚举类型的值时,永远不需要调用equals,而直接使用“==”就可以了

本质是泛型类

如同Class类一样,鉴于简化的考虑,Enum类省略了一个类型参数。

例如:实际上,应该将枚举类型Size扩展为Enum<Size>

Size s = Size.MEDIUM;
// 是下面的化简
Enum<Size> = Enum<Size>.MEDIUM

Enum公有基类

所有的枚举类型都是Enum类的子类。它们继承了这个类的许多方法。

  • toString

    其中最有用的一个是toString,这个方法能够返回枚举常量名。例如:

    Size.SMALL.toString()  // 将返回字符串“SMALL”
    
  • valueOf

    toString的逆方法是静态方法valueOf。例如:

    Size s = Enum.valueOf(Size.class, "SMALL");  // 将s设置成Size.SMALL
    
  • values方法(静态)

    它将返回一个包含全部枚举值的数组

    Size[] values = Size.values();  // 返回 [Size.SMALL,Size.MEDIUM,Size.LARGE, Size.EXTRA_LARGE]
    
  • ordinal方法

    返回enum声明中枚举常量的位置,位置从0开始计数

    Size.MEDIUM.ordinal();  // 返回 1
    

与C++不同

  • C/C++中
    • 枚举类是一个基本类型
  • Java
    • 枚举类是一个类
  • Python
    • 没有枚举类,但可以用类来模拟枚举