国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

馴服Tiger之深入研究枚舉類型

2019-11-17 05:59:18
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
基礎(chǔ)知識(shí)

  在J2SE1.5中通過(guò)使用新的 enum 要害字創(chuàng)建指定的對(duì)象集合,您可以創(chuàng)建一個(gè)枚舉類型。然后,可以將每個(gè)指定的值看作是那個(gè)類的一個(gè)實(shí)例,這為您提供了指定的整數(shù)集合所無(wú)法提供的編譯時(shí)類型安全。清單 1 將創(chuàng)建一個(gè)枚舉類型,并將類型安全的枚舉值作為幫助器方法(helper method)的參數(shù)。該枚舉類型的 values() 方法返回這種類型的不同值的有序數(shù)組。

  清單 1. 枚舉類型的例子

public class Loop {
 enum Size {
  Small,
  Medium,
  Large
 }
 public static void main(String args[]) {
  for (Size s : Size.values()) {
   helper(s);
  }
 }

 PRivate static void helper(Size s) {
  System.out.println("Size value: " + s);
 }
}
  構(gòu)造函數(shù)、方法和變量

  在使用 enum 要害字創(chuàng)建新的枚舉類型時(shí),實(shí)際上是在創(chuàng)建 java.lang.Enum 類的子類,其中,枚舉類型符合通用模式 Class Enum<E extends Enum<E>>,而 E 表示枚舉類型的名稱。枚舉類型的每一個(gè)值都將映射到 protected Enum(String name, int ordinal) 構(gòu)造函數(shù)中,在這里,每個(gè)值的名稱都被轉(zhuǎn)換成一個(gè)字符串,并且序數(shù)設(shè)置表示了每個(gè)設(shè)置的優(yōu)先值。換句話說(shuō),enum Size {Small, Medium, Large} 將映射到清單 2 中所示的構(gòu)造函數(shù)調(diào)用中:

清單 2. 映射的構(gòu)造函數(shù)調(diào)用

new Enum<Size>("Small", 0);
new Enum<Size>("Medium", 1);
new Enum<Size>("Large", 2);
  不必將構(gòu)造函數(shù)的使用限制為間接 Enum 構(gòu)造函數(shù)調(diào)用。在使用 enum 要害字時(shí),將創(chuàng)建 Enum 的子類。您可以使用參數(shù)和任何別的東西為定義的每個(gè)名稱添加一些您自己的構(gòu)造函數(shù)調(diào)用。名稱聲明可以看作是對(duì)構(gòu)造函數(shù)的調(diào)用,您不必添加 new 要害字。這種方法答應(yīng)您將數(shù)據(jù)作為參數(shù)值傳遞給構(gòu)造函數(shù)調(diào)用,如清單 3 所示。該參數(shù)表示 Size 對(duì)象的枚舉集合的定價(jià)因子。位于枚舉類型定義之后的 main() 方法演示了這種用法。

清單 3. 定制構(gòu)造函數(shù)的例子

public class Sample {
 enum Size {
  Small(0.8),
  Medium(1.0),
  Large(1.2);

  double pricingFactor;

  Size(double p) {
   pricingFactor = p;
  }
 }
 public static void main(String args[]) {
  Size s = Size.Large;
  double d = s.pricingFactor;
  System.out.println(s + " Size has pricing factor of " + d);
 }
}
  運(yùn)行該程序?qū)⒎祷亟o定 Size 的定價(jià)因子。您還可以定義一個(gè)類似于 getPricingFactor() 的方法,并將 pricingFactor 字段設(shè)置為 private,以便更多地將它作為類 JavaBean 的屬性對(duì)待。清單 4 給前面的例子添加了一個(gè)方法:

清單 4. 方法的例子

public class Sample2 {
 enum Size {
  Small(0.8),
  Medium(1.0),
  Large(1.2);

  private double pricingFactor;

  Size(double p) {
   pricingFactor = p;
  }

  public double getPricingFactor() {
   return pricingFactor;
  }
 }
 public static void main(String args[]) {
  Size s = Size.Large;
  double d = s.getPricingFactor();
  System.out.println(s + " Size has pricing factor of " + d);
 }
}
  對(duì)于這兩種情況,輸出均為:

Large Size has pricing factor of 1.2 QQRead.com 推出數(shù)據(jù)恢復(fù)指南教程 數(shù)據(jù)恢復(fù)指南教程 數(shù)據(jù)恢復(fù)故障解析 常用數(shù)據(jù)恢復(fù)方案 硬盤(pán)數(shù)據(jù)恢復(fù)教程 數(shù)據(jù)保護(hù)方法 數(shù)據(jù)恢復(fù)軟件 專業(yè)數(shù)據(jù)恢復(fù)服務(wù)指南 預(yù)定義的方法

  因?yàn)橛脩舳x的枚舉類型是 Enum 類型的子類,所以您需要繼續(xù)用于您的類型的那個(gè)類的所有方法。下面列出了完整的方法集合(E 表示枚舉類型自身):

public int compareTo(E e)
public boolean equals(Object o)
public final Class<E> getDeclaringClass()
public int hashCode()
public String name()
public int ordinal()
public String toString()
public static <T extends Enum<T>> T valueOf(Class<T> enumType, String name)
  一些方法看起來(lái)很熟悉,而其他一些方法則是特定于 Enum 類的。compareTo()、equals() 和 hashCode() 方法是典型的 Object 和 Comparable 方法,其中,compareTo() 報(bào)告聲明元素的順序。name() 和 ordinal() 方法返回構(gòu)造函數(shù)參數(shù),而 toString() 返回名稱。

  getDeclaringClass() 和 valueOf() 方法需要稍多一些解釋。getDeclaringClass() 方法類似于 Object 的 getClass() 方法,但它沒(méi)必要返回相同的類。根據(jù)這個(gè)方法的 Javadoc 的說(shuō)明:

  對(duì)于具有特定于常量的類主體的 enum 常量,該方法返回的值可能不同于 Object.getClass() 方法返回的值。

  接下來(lái),我將解釋特定于常量的類主體。valueOf() 方法是靜態(tài)的,它答應(yīng)您從類型的名稱中創(chuàng)建枚舉的值。

  特定于常量的類主體

  特定于常量的類主體是 enum 要害字的一個(gè)受支持的特性;不過(guò),它們的使用應(yīng)該受到嚴(yán)格的限制。這個(gè)概念正在深入到將枚舉類型的每個(gè)元素作為一個(gè)子類對(duì)待的領(lǐng)域。例如,在前面的例子中,Size 枚舉類型有一個(gè)定價(jià)因子參數(shù)和 getPricingFactor() 方法。但沒(méi)有構(gòu)造函數(shù)參數(shù),清單 5 展示了如何利用特定于常量的主體來(lái)做同樣的事。我們添加了一些額外的大小來(lái)讓這個(gè)例子更有趣些。在這里,Small 的定價(jià)因子是 0.8,而 ExtraLarge 和 ExtraExtraLarge 的定價(jià)因子是 1.2。其余的大小則采用默認(rèn)值,即 1.0。

清單 5. 特定于常量的主體



發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 邵武市| 吴旗县| 嘉峪关市| 文水县| 阳朔县| 米泉市| 新安县| 阳春市| 昌都县| 汉沽区| 那坡县| 阿鲁科尔沁旗| 无为县| 玉屏| 博客| 靖安县| 潮州市| 垫江县| 黄山市| 宝山区| 瑞金市| 沾益县| 广汉市| 余庆县| 南靖县| 视频| 万源市| 东平县| 潞城市| 黎城县| 蒙阴县| 青川县| 诸暨市| 明光市| 延安市| 灵宝市| 黄大仙区| 信阳市| 潼南县| 内黄县| 仙游县|