程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 深刻談談java的列舉(enum)類型

深刻談談java的列舉(enum)類型

編輯:關於JAVA

深刻談談java的列舉(enum)類型。本站提示廣大學習愛好者:(深刻談談java的列舉(enum)類型)文章只能為提供參考,不一定能成為您想要的結果。以下是深刻談談java的列舉(enum)類型正文


媒介

在年夜家平常編程中,常常存在著如許的“數據集”,它們的數值在法式中是穩固的,並且“數據集”中的元素是無限的。例如禮拜一到禮拜日七個數據元素構成了一周的“數據集”,春夏秋冬四個數據元素構成了四時的“數據集”。在java中若何更好的應用這些“數據集”呢?是以列舉便派上了用處

列舉其實就是一品種型,跟int, char 這類差不多,就是界說變量時限制輸出的,你只可以或許賦enum外面劃定的值。

列舉(enum)完成

JDK5中供給了Java列舉類型的完成,與其說是一種新類型,倒不如說是一種語法糖。

public enum Season {
 SPRING,
 SUMMER,
 AUTUMN,
 WINTER
}

經由過程反編譯對象來看看這段代碼是若何完成的,反編譯後的代碼以下:

public final class Season extends Enum {

 public static Season[] values() {
  return (Season[])$VALUES.clone();
 }

 public static Season valueOf(String s) {
  return (Season)Enum.valueOf(Season, s);
 }

 private Season(String s, int i) {
  super(s, i);
 }

 public static final Season SPRING;
 public static final Season SUMMER;
 public static final Season AUTUMN;
 public static final Season WINTER;
 private static final Season $VALUES[];

 static {
  SPRING = new Season("SPRING", 0);
  SUMMER = new Season("SUMMER", 1);
  AUTUMN = new Season("AUTUMN", 2);
  WINTER = new Season("WINTER", 3);
  $VALUES = (new Season[] {
   SPRING, SUMMER, AUTUMN, WINTER
  });
 }
}

經由過程反編譯的代碼可以發明:

1、Season是一個通俗的類,繼續自Enum,並經由過程final症結字潤飾,防止被繼續,

2、列舉中的SPRINGSUMMERAUTUMNWINTERSeason類的靜態實例,並在類結構器<clinit>辦法中停止初始化。

3、values()辦法前往公有變量$VALUES[]的正本,$VALUES[]也是在<clinit>辦法中停止初始化。

若何應用列舉(enum)

1、單例形式

我們曾經曉得類結構器<clinit>只能被一個線程在類加載的初始化階段停止履行,所以列舉的每一個實例在Java堆中有且只要一個正本,這類特征讓列舉很輕易就完成了單例形式,這也恰是Effective Java作者 Josh Bloch 倡導應用完成單利形式的方法。

public enum Singleton { INSTANCE;}

2、在switch中應用

3、自界說字段和辦法

列舉(enum)中除默許字段和辦法以外,可以針對營業邏輯停止自界說。

public enum EnumTest {
 PLUS("+") {
  @Override
  public int bind(int arg1, int arg2) {
   return arg1 + arg2;
  }
 },
 SUB("-") {
  @Override
  public int bind(int arg1, int arg2) {
   return arg1 - arg2;
  }
 };

 final String operation;

 EnumTest(String operation) {
  this.operation = operation;
 }

 abstract int bind(int arg1, int arg2);
}

4、完成接口

interface Operation{
 int operate(int arg1, int arg2);
}

public enum EnumTest implements Operation {

 PLUS("+") {
  @Override
  public int operate(int arg1, int arg2) {
   return arg1 + arg2;
  }
 },
 SUB("-") {
  @Override
  public int operate(int arg1, int arg2) {
   return arg1 - arg2;
  }
 };

 final String operation;

 EnumTest(String operation) {
  this.operation = operation;
 }
}

在現實運用中,可以把 "+"、"-" 作為key,PLUS和SUB作為value,事後保留在hashMap中,詳細應用方法以下:

Operation operation = hashMap.get("+");
int result = operation.bind(1, 2);

總結

以上就是關於Java中列舉類型的全體內容了,願望經由過程本文對java中列舉的引見,可以或許給年夜家帶來贊助。假如有疑問年夜家可以留言交換。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved