Java 枚舉值

2018-01-19 15:00 更新

Java面向?qū)ο笤O(shè)計(jì) - Java枚舉值


枚舉類型定義了兩件事:

  • 枚舉常量
  • 這些常量的順序

以下代碼聲明了一個(gè)名為Level的公共枚舉類型,它具有四個(gè)枚舉常量:LOW,MEDIUM,HIGH和URGENT。

public enum Level {
    LOW,  MEDIUM,  HIGH, URGENT;
}

Level枚舉類型定義了四個(gè)枚舉常量。

Level枚舉類型的變量只能有四個(gè)值之一 - LOW,MEDIUM,HIGH和URGENT或null。

我們可以使用點(diǎn)符號通過使用枚舉類型名稱作為限定符來引用枚舉常量。

以下代碼將值分配給Level枚舉類型的變量:

Level low  = Level.LOW; 
Level medium = Level.MEDIUM; 
Level high  = Level.HIGH; 
Level urgent = Level.URGENT;

我們不能實(shí)例化枚舉類型。以下代碼導(dǎo)致編譯時(shí)錯(cuò)誤:

Level badAttempt   = new Level(); // A  compile-time error

枚舉分配順序號

枚舉類型為其所有常量分配一個(gè)順序號,稱為ordinal。

序數(shù)從零開始,在常數(shù)列表中從第一個(gè)到最后一個(gè)遞增1。

第一個(gè)枚舉常量賦值為零,第二個(gè)為1,第三個(gè)為2,依此類推。

分配給Level枚舉類型中聲明的常量的序數(shù)值為0到LOW,1到MEDIUM,2到HIGH,以及3到URGENT。

每個(gè)枚舉常量都有一個(gè)與常量的標(biāo)識符相同的名稱。例如,級別枚舉類型中的LOW常數(shù)的名稱為“LOW”。

我們可以分別使用name()和ordinal()方法獲取枚舉常量的名稱和序號。

每個(gè)枚舉類型都有一個(gè)名為values()的靜態(tài)方法,它按它們在正文中聲明的順序返回一個(gè)常量數(shù)組。

以下代碼打印在Level枚舉類型中聲明的所有枚舉常量的名稱和序號。

enum Level {
  LOW, MEDIUM, HIGH, URGENT;
}

public class Main {
  public static void main(String[] args) {
    for (Level s : Level.values()) {
      String name = s.name();
      int ordinal = s.ordinal();
      System.out.println(name + "(" + ordinal + ")");
    }
  }
}

上面的代碼生成以下結(jié)果。

枚舉常量的反向查找

我們可以從名稱或位置獲得枚舉常量的引用。使用valueOf()方法。

枚舉常量的反向查找區(qū)分大小寫。

我們可以使用values()方法返回的數(shù)組,通過順序執(zhí)行反向查找。

values()方法返回的數(shù)組中的值的順序與枚舉常量的聲明順序相同。

枚舉常量的序數(shù)從零開始。

以下代碼演示了如何反轉(zhuǎn)查找枚舉常量:

enum Level {
  LOW, MEDIUM, HIGH, URGENT;
}

public class Main {
  public static void main(String[] args) {
    Level low1 = Level.valueOf("LOW");
    // A reverse lookup using a name
    Level low2 = Level.values()[0];
    // A reverse lookup using an ordinal
    System.out.println(low1);
    System.out.println(low2);
    System.out.println(low1 == low2);

  }
}

上面的代碼生成以下結(jié)果。

枚舉常量的范圍

java.util.EnumSet集合類與枚舉類型的枚舉常量列表一起使用。

下面的代碼演示了如何使用EnumSet類來處理枚舉常量的范圍。

import java.util.EnumSet;

enum Level {
  LOW, MEDIUM, HIGH, URGENT;
}

public class Main {
  public static void main(String[] args) {
    EnumSet<Level> allLevels = EnumSet.allOf(Level.class);
    print(allLevels);

    EnumSet<Level> l = EnumSet.range(Level.LOW, Level.URGENT);
    print(l);

  }
  public static void print(EnumSet<Level> levels) {
    for (Level d : levels) {
      System.out.println(d + "  ");
    }
  }
}

上面的代碼生成以下結(jié)果。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號