原文: https://beginnersbook.com/2014/09/java-enum-examples/

枚举是一种特殊类型的数据类型,它基本上是常量的集合(集合)。在本教程中,我们将学习如何在 Java 中使用枚举以及我们可以使用它们的可能场景。

这就是我们定义Enum的方式

  1. public enum Directions{
  2. EAST,
  3. WEST,
  4. NORTH,
  5. SOUTH
  6. }

这里我们有枚举类型的变量方向,它是四个常数EASTWESTNORTHSOUTH的集合。

如何为枚举类型赋值?

  1. Directions dir = Directions.NORTH;

变量dir的类型为Directions(即枚举类型)。此变量可以取可能的四个值(EASTWESTNORTHSOUTH)中的任何值。在这种情况下,它设置为NORTH

if-else语句中使用Enum类型

这就是我们如何在if-else逻辑中使用枚举变量。

  1. /* You can assign any value here out of
  2. * EAST, WEST, NORTH, SOUTH. Just for the
  3. * sake of example, I'm assigning to NORTH
  4. */
  5. Directions dir = Directions.NORTH;
  6. if(dir == Directions.EAST) {
  7. // Do something. Write your logic
  8. } else if(dir == Directions.WEST) {
  9. // Do something else
  10. } else if(dir == Directions.NORTH) {
  11. // Do something
  12. } else {
  13. /* Do Something. Write logic for
  14. * the remaining constant SOUTH
  15. */
  16. }

枚举示例

这只是演示使用枚举的一个示例。如果您了解核心部分和基础知识,您就可以根据需求编写自己的逻辑。

  1. public enum Directions{
  2. EAST,
  3. WEST,
  4. NORTH,
  5. SOUTH
  6. }
  7. public class EnumDemo
  8. {
  9. public static void main(String args[]){
  10. Directions dir = Directions.NORTH;
  11. if(dir == Directions.EAST) {
  12. System.out.println("Direction: East");
  13. } else if(dir == Directions.WEST) {
  14. System.out.println("Direction: West");
  15. } else if(dir == Directions.NORTH) {
  16. System.out.println("Direction: North");
  17. } else {
  18. System.out.println("Direction: South");
  19. }
  20. }
  21. }

输出:

  1. Direction: North

Switch-Case语句中使用Enum

下面是演示在switch-case语句中使用枚举的示例。

  1. public enum Directions{
  2. EAST,
  3. WEST,
  4. NORTH,
  5. SOUTH
  6. }
  7. public class EnumDemo
  8. {
  9. Directions dir;
  10. public EnumDemo(Directions dir) {
  11. this.dir = dir;
  12. }
  13. public void getMyDirection() {
  14. switch (dir) {
  15. case EAST:
  16. System.out.println("In East Direction");
  17. break;
  18. case WEST:
  19. System.out.println("In West Direction");
  20. break;
  21. case NORTH:
  22. System.out.println("In North Direction");
  23. break;
  24. default:
  25. System.out.println("In South Direction");
  26. break;
  27. }
  28. }
  29. public static void main(String[] args) {
  30. EnumDemo obj1 = new EnumDemo(Directions.EAST);
  31. obj1.getMyDirection();
  32. EnumDemo obj2 = new EnumDemo(Directions.SOUTH);
  33. obj2.getMyDirection();
  34. }
  35. }

输出:

  1. In East Direction
  2. In South Direction

如何遍历Enum变量

  1. class EnumDemo
  2. {
  3. public static void main(String[] args) {
  4. for (Directions dir : Directions.values()) {
  5. System.out.println(dir);
  6. }
  7. }
  8. }

此代码将显示所有四个常量。

枚举字段和方法

让我们先举一个例子然后我们将详细讨论它:

  1. public enum Directions{
  2. EAST ("E"),
  3. WEST ("W"),
  4. NORTH ("N"),
  5. SOUTH ("S")
  6. ;
  7. /* Important Note: Must have semicolon at
  8. * the end when there is a enum field or method
  9. */
  10. private final String shortCode;
  11. Directions(String code) {
  12. this.shortCode = code;
  13. }
  14. public String getDirectionCode() {
  15. return this.shortCode;
  16. }
  17. }
  18. public class EnumDemo
  19. {
  20. public static void main(String[] args) {
  21. Directions dir = Directions.SOUTH;
  22. System.out.println(dir.getDirectionCode());
  23. Directions dir2 = Directions.EAST;
  24. System.out.println(dir2.getDirectionCode());
  25. }
  26. }

输出:

  1. S
  2. E

正如您在本示例中所看到的,我们为每个常量都有一个字段shortCode,以及一个方法getDirectionCode(),它基本上是该字段的获取器方法。当我们定义一个像EAST ("E")这样的常量时,它会使用传递的参数调用枚举构造函数(参见上例中的构造函数Directions)。这样,传递的值被设置为相应枚举常数EAST("E")的字段的值,它会调用构造函数Directions("E")this.shortCode = code,即this.shortCode = "E",常数EASTshortCode字段设置为"E"

注意事项:

1)在定义枚举时,应在任何字段或方法之前首先声明常量。

2)当在Enum中声明了字段和方法时,枚举常量列表必须以分号(;)结尾。