Skip to content

枚举类型

枚举类型可以取代以往将常量封装在类或接口中的定义方式,此外还提供了安全检查功能,可以避免传入非法参数。枚举类型本质还是以类的形式存在。

使用枚举类型的优势:

  • 代码可读性高:相比 intString,枚举更加直观。
  • 类型安全:防止传递无效的值。
  • 可扩展性强:可以添加方法,支持复杂逻辑。

使用枚举类型设置常量

在平时定义常量类时,通常会在接口中使用 public static final 修饰的常量,如下:

java
public interface Constants {
    public static final int RED = 1;
    public static final int GREEN = 2;
    public static final int BLUE = 3;
}

在枚举类型出现之后,取代了上述定义常量的方式,如下:

java
public enum Color {
    RED, GREEN, BLUE;
}

在使用枚举类型时,可以通过 Color.REDColor.GREENColor.BLUE 来访问枚举类型的常量。

深入了解枚举类型

枚举类型相较于传统定义常量的方式,除了具有参数类型检查的功能外,还提供了一些其他功能。

当定义一个枚举类型时,每一个枚举类型的成员都可以看做是一个枚举类型的实例,这些枚举类型成员默认被 publicfinalstatic 修饰,不能被修改。

由于枚举类型对象继承自 java.lang.Enum 类,因此该类中一些操作枚举类型的方法都可以应用到枚举类型中。

25021805.png

表 枚举类型的常用方法

values() 方法返回该枚举类型的所有枚举常量数组,可以用于遍历枚举:

java
public enum Color {
    RED, GREEN, BLUE;
}

public class EnumDemo {
    public static void main(String[] args) {
        // 遍历所有枚举值
        for (Color color : Color.values()) {
            System.out.println(color);
        }
    }
}

valueOf(String name) 方法根据 字符串 获取对应的枚举常量,如果字符串不存在,会抛出 IllegalArgumentException

java
public class EnumDemo {
    public static void main(String[] args) {
        Color color = Color.valueOf("RED");
        System.out.println(color); // 输出 RED
        
        // Color color = Color.valueOf("YELLOW"); // 报错:IllegalArgumentException
    }
}

compareTo(Enum<?> e) 方法用于 比较两个枚举常量的顺序,返回它们的 ordinal() 差值:

java
public class EnumDemo {
    public static void main(String[] args) {
        Color red = Color.RED;
        Color green = Color.GREEN;
        
        System.out.println(red.compareTo(green)); // -1
        System.out.println(green.compareTo(red)); // 1
    }
}

ordinal() 方法返回 枚举常量的索引位置(从 0 开始):

java
public class EnumDemo {
    public static void main(String[] args) {
        System.out.println(Color.RED.ordinal());   // 0
        System.out.println(Color.GREEN.ordinal()); // 1
        System.out.println(Color.BLUE.ordinal());  // 2
    }
}
编程洪同学服务平台是一个广泛收集编程相关内容和资源,旨在满足编程爱好者和专业开发人员的需求的网站。无论您是初学者还是经验丰富的开发者,都可以在这里找到有用的信息和资料,我们将助您提升编程技能和知识。
专业开发
高端定制
售后无忧
站内资源均为本站制作或收集于互联网等平台,如有侵权,请第一时间联系本站,敬请谅解!本站资源仅限于学习与参考,严禁用于各种非法活动,否则后果自行负责,本站概不承担!