中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

在Java項目中使用枚舉類型的方法有哪些

發布時間:2020-11-19 16:50:25 來源:億速云 閱讀:230 作者:Leah 欄目:編程語言

這期內容當中小編將會給大家帶來有關在Java項目中使用枚舉類型的方法有哪些,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

 Java枚舉類型enum

一、   通常定義常量方法

我們通常利用public final static 方法定義的代碼如下,分別用1 表示紅燈,3 表示綠燈,2 表示黃燈。

package com.csdn.myEnum;
public class Light {
  /* 紅燈 */
  public final static int RED =1;
  /* 綠燈 */
  public final static int GREEN =3;
  /* 黃燈 */
  public final static int YELLOW =2;
}

 二、   枚舉類型定義常量方法

枚舉類型的簡單定義方法如下,我們似乎沒辦法定義每個枚舉類型的值。比如我們定義紅燈、綠燈和黃燈的代碼可能如下:

public enum Light {
    RED , GREEN , YELLOW ;
}

我們只能夠表示出紅燈、綠燈和黃燈,但是具體的值我們沒辦法表示出來。別急,既然枚舉類型提供了構造函數,我們可以通過構造函數和覆寫toString 方法來實現。首先給Light 枚舉類型增加構造方法,然后每個枚舉類型的值通過構造函數傳入對應的參數,同時覆寫toString 方法,在該方法中返回從構造函數中傳入的參數,改造后的代碼如下:

public enum Light {
    // 利用構造函數傳參
    RED (1), GREEN (3), YELLOW (2);
 
    // 定義私有變量
    private int nCode ;
 
    // 構造函數,枚舉類型只能為私有
    private Light( int _nCode) {
      this . nCode = _nCode;
    }
 
    @Override
    public String toString() {
      return String.valueOf ( this . nCode );
    }
  } 

三、   完整示例代碼

枚舉類型的完整演示代碼如下:

package com.csdn.myEnum;
 
import java.util.EnumMap;
import java.util.EnumSet;
 
public class LightTest {
 
  // 1. 定義枚舉類型
  public enum Light {
    // 利用構造函數傳參
    RED (1), GREEN (3), YELLOW (2);
 
    // 定義私有變量
    private int nCode ;
 
    // 構造函數,枚舉類型只能為私有
    private Light( int _nCode) {
      this . nCode = _nCode;
    }
 
    @Override
    public String toString() {
      return String.valueOf ( this . nCode );
    }
  }
 
  /**
   * @param args
   */
  public static void main(String[] args ) {
 
    // 1. 遍歷枚舉類型
    System. out .println( " 演示枚舉類型的遍歷 ......" );
    testTraversalEnum ();
 
    // 2. 演示 EnumMap 對象的使用
    System. out .println( " 演示 EnmuMap 對象的使用和遍歷 ....." );
    testEnumMap ();
 
    // 3. 演示 EnmuSet 的使用
    System. out .println( " 演示 EnmuSet 對象的使用和遍歷 ....." );
    testEnumSet ();
  }
 
  /**
   * 演示枚舉類型的遍歷
   */
  private static void testTraversalEnum() {
    Light[] allLight = Light.values ();
    for (Light aLight : allLight) {
      System. out .println( " 當前燈 name : " + aLight.name());
      System. out .println( " 當前燈 ordinal : " + aLight.ordinal());
      System. out .println( " 當前燈: " + aLight);
    }
  }
 
  /**
   * 演示 EnumMap 的使用, EnumMap 跟 HashMap 的使用差不多,只不過 key 要是枚舉類型
   */
  private static void testEnumMap() {
    // 1. 演示定義 EnumMap 對象, EnumMap 對象的構造函數需要參數傳入 , 默認是key 的類的類型
    EnumMap<Light, String> currEnumMap = new EnumMap<Light, String>(
       Light. class );
    currEnumMap.put(Light. RED , " 紅燈 " );
    currEnumMap.put(Light. GREEN , " 綠燈 " );
    currEnumMap.put(Light. YELLOW , " 黃燈 " );
 
    // 2. 遍歷對象
    for (Light aLight : Light.values ()) {
      System. out .println( "[key=" + aLight.name() + ",value="
         + currEnumMap.get(aLight) + "]" );
    }
  }
 
  /**
   * 演示 EnumSet 如何使用, EnumSet 是一個抽象類,獲取一個類型的枚舉類型內容<BR/>
   * 可以使用 allOf 方法
   */
  private static void testEnumSet() {
    EnumSet<Light> currEnumSet = EnumSet.allOf (Light. class );
    for (Light aLightSetElement : currEnumSet) {
      System. out .println( " 當前 EnumSet 中數據為: " + aLightSetElement);
    }
 
  }
} 
 

執行結果如下:

演示枚舉類型的遍歷 ......
當前燈 name : RED
當前燈 ordinal : 0
當前燈: 1
當前燈 name : GREEN
當前燈 ordinal : 1
當前燈: 3
當前燈 name : YELLOW
當前燈 ordinal : 2
當前燈: 2
演示 EnmuMap 對象的使用和遍歷 .....
[key=RED,value= 紅燈 ]
[key=GREEN,value= 綠燈 ]
[key=YELLOW,value= 黃燈 ]
演示 EnmuSet 對象的使用和遍歷 .....
當前 EnumSet 中數據為: 1
當前 EnumSet 中數據為: 3
當前 EnumSet 中數據為: 2 

 四、   通常定義常量方法和枚舉定義常量方法區別

以下內容可能有些無聊,但絕對值得一窺

1.    代碼:

public class State {
public static final int ON = 1;
public static final Int OFF= 0;
}

 有什么不好了,大家都這樣用了很長時間了,沒什么問題啊。

首先,它不是類型安全的。你必須確保是int

其次,你還要確保它的范圍是0 和1

最后,很多時候你打印出來的時候,你只看到 1 和0 , 

但其沒有看到代碼的人并不知道你的企圖,拋棄你所有舊的public static final 常量吧 

2.    可以創建一個enum 類,把它看做一個普通的類。除了它不能繼承其他類了。(java 是單繼承,它已經繼承了Enum),
可以添加其他方法,覆蓋它本身的方法

3.    switch() 參數可以使用enum 了 

4.    values() 方法是編譯器插入到enum 定義中的static 方法,所以,當你將enum 實例向上轉型為父類Enum是,values() 就不可訪問了。解決辦法:在Class 中有一個getEnumConstants() 方法,所以即便Enum 接口中沒有values() 方法,我們仍然可以通過Class 對象取得所有的enum 實例 

5.    無法從enum 繼承子類,如果需要擴展enum 中的元素,在一個接口的內部,創建實現該接口的枚舉,以此將元素進行分組。達到將枚舉元素進行分組。 

6.    使用EnumSet 代替標志。enum 要求其成員都是唯一的,但是enum 中不能刪除添加元素。 

7.    EnumMap 的key 是enum ,value 是任何其他Object 對象。 

8.    enum 允許程序員為eunm 實例編寫方法。所以可以為每個enum 實例賦予各自不同的行為。 

9.    使用enum 的職責鏈(Chain of Responsibility) . 這個關系到設計模式的職責鏈模式。以多種不同的方法來解決一個問題。然后將他們鏈接在一起。當一個請求到來時,遍歷這個鏈,直到鏈中的某個解決方案能夠處理該請求。 

10.   使用enum 的狀態機 

11.   使用enum 多路分發

上述就是小編為大家分享的在Java項目中使用枚舉類型的方法有哪些了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

勐海县| 沁阳市| 鄂托克前旗| 莱西市| 资阳市| 新宁县| 冷水江市| 巫溪县| 阜宁县| 泗阳县| 墨脱县| 建始县| 临泽县| 大渡口区| 临邑县| 肇州县| 宣恩县| 阆中市| 甘德县| 手游| 长治县| 平定县| 车致| 盖州市| 丰镇市| 常山县| 乌拉特中旗| 安国市| 鸡泽县| 四子王旗| 樟树市| 运城市| 巴青县| 宝应县| 广平县| 桂阳县| 古田县| 沙湾县| 鹤壁市| 南溪县| 应用必备|