您的位置:

Java Enum类的ordinal方法使用

一、Enum类的概述

在Java中,枚举类型是一种特殊的数据类型,它可以让我们定义一组有限的常量值。枚举类型在Java SE5之后才被引入,它是一种新的类型,被封装成了class类型的形式。Java中的Enum类是所有枚举类型的公共祖先。Enum类中提供了一些基本方法,其中ordinal是其中一个常用方法。

二、Enum类的ordinal方法

ordinal方法是用来获取枚举对象在定义时的次序值,即获取枚举对象本身在枚举类中定义时的顺序,从0开始计数。

例如下面定义了一个星期枚举类型:

public enum Weekday {
    MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}

那么我们可以通过调用Weekday.MONDAY.ordinal()方法来获取星期一在枚举类中的次序值,它将返回0。

在具体实现中,ordinal()方法返回的是当前枚举元素在ordinal()方法调用时,枚举类型中的下标索引,这样才保证对于相同枚举类型,在不同的程序执行中ordinal()方法返回值是相同的,而且每次枚举类型被加载后自动赋值,无需初始化。

三、Enum类的ordinal方法应用场景

1、排序

一些需要进行排序的场景中,可以使用枚举的ordinal()方法获取到每个枚举常量所对应的数值,这样可以方便地进行比较和排序。下面是一个使用枚举排序的例子:

public class EnumSortExample {
    enum Size { S, M, L, XL };
    public static void main(String[] args) {
        Size[] sizes = { Size.XL, Size.S, Size.L, Size.M  };
        Arrays.sort(sizes, new Comparator() {
            @Override
            public int compare(Size size1, Size size2) {
                return size1.ordinal() - size2.ordinal();
            }
        });
        for (Size size : sizes) {
            System.out.println(size);
        }
    }
}

  

该程序定义了一个EnumSortExample类,使用枚举类型Size来表示衣服的尺码大小,然后对尺码大小进行排序。我们可以看到,在排序时使用的compare()方法中,调用了枚举类型的ordinal()方法,将其转换为数值进行比较。

2、自定义枚举类型

在自定义枚举类型时,ordinal()方法自动为每个枚举对象赋值,使用ordinal()方法可以方便地根据枚举对象的次序来进行相应操作。下面是一个使用自定义枚举类型的例子:

public enum Direction {
   EAST(1), SOUTH(2), WEST(3), NORTH(4);
   private final int value;
   private Direction(int value) {
      this.value = value;
   }
   public int getValue() {
      return value;
   }
}

该程序定义了一个方向枚举类型,Direction类中的四个属性(EAST、SOUTH、WEST、NORTH)代表四个方向。在定义这些枚举对象时,可以通过类似EAST(1)这样的语句为每个枚举对象设置相应的值。这里的1、2、3和4就是该枚举对象在枚举类型中的次序。如需要获取Direction.EAST的次序值,可以使用Direction.EAST.ordinal()方法,返回1。

四、Enum类的ordinal方法注意事项

在使用Enum类中的ordinal方法时需要注意以下几点:

  • ordinal()方法返回的基础值可以通过修改枚举常量在声明时定义的次序值,不建议在外部使用ordinal()方法得到枚举常量的次序值,而是应该在枚举类型内部添加一个专门的次序值属性来代替ordinal()方法来获取次序值,以保证程序运行更加安全可靠
  • ordinal()方法可以与compareTo()方法一起使用,compareTo()方法的签名定义在可比较接口中,其中包含着ordinal()方法的比较语义,使用compareTo方法比使用ordinal()方法更通用,更安全,更符合面向对象的设计

五、总结

Enum类的ordinal方法是一个非常常用的方法,可以方便地获取枚举类型的对象在定义时的次序值。在使用时需要注意ordinal()方法的返回值代表枚举对象在枚举类中定义时的顺序,需要结合具体应用场景,合理地使用该方法。