专业的JAVA编程教程与资源

网站首页 > java教程 正文

java 核心技术-12版 卷Ⅰ- 5.7 枚举类

temp10 2024-10-06 02:04:17 java教程 11 ℃ 0 评论

原文

5.7 枚举类

我们在第3章已经已经看到如何定义枚举类型。下面是一个典型的例子:

publlc enum Size { SMALL,MEDIUM, LARGE,EXTRA LARGE }

java 核心技术-12版 卷Ⅰ- 5.7 枚举类

?实际上,这个声明定义的类型是一个类,它刚好有 4 个实例,不可能构造新的对象。

?因此,在比较枚举类型的值时,并不需要使用 equals,可以直接使用 == 来比较。

?如果需要的话,可以为枚举类型增加构造器、方法和字段。当然,构造器只是在构造枚举常量的时候调用。下面是一个示例:

public enum Size{

	SMALL("S") ,
  MEDIUM("M"),
  LARGE("L"),
  EXTRA_LARGE("XL");
  
  private String abbreviation;
  
  Size(String abbreviation){
  	this.abbreviation = abbreviation;
  }
  // automatically private
  
  public String getAbbreviation{
  	return abbreviation;
  }
  
}

枚举的构造器总是私有的。可以像前例中一样省略 private 修饰符。如果声明一个 enum 构造器为 public或 protected,则会出现语法错误。

?所有的枚举类型都是抽象类 Enun 的子类。它们继承了这个类的许多方法。其中,最有用的一个是toString,这个方法会返回枚举常量名。例如,Size.SMALL.toString()将返回字符串“SMALL"。

?toString 的逆方法是静态方法 valueOf。例如,以下语句

?Size s = Enum.value0f(Size.class,"SMALL");

?将s设置成Size.SMALL。

?每个枚举类型都有一个静态的 values 方法,它将返回一个包含全部枚举值的数组。例如如下调用

Size[ ] values = Size.values();

?将返回包含元素 Size.SMALL、Size.MEDIUM、Size.LARGE 和 Size.EXTRA_LARGE 的数组。

?ordinal 方法返回一个枚举常量在 enum声明中的位置,位置从0开始计数。例如,Size.NEDIUM.ordinal() 返回1。

程序清单 5-12 中的小程序演示了如何处理枚举类型。

?注释: Enum类有一个类型参数,不过为简单起见,我们省略了这个类型参数。例如,实际上枚举类型 Size 扩展了Enum<Size>。类型参数会在 compareTo 方法中使用 (compareTo方法将在第 6章中介绍,类型参数将在第8章中介绍)。

程序清单5-12 enums/EnumTest.java

package enums;

import java.util.*;

/**
 * This program demonstrates enumerated types.
 * @version 1.0 2004-05-24
 * @author Cay Horstmann
 */
public class EnumTest
{  
   public static void main(String[] args)
   {  
      var in = new Scanner(System.in);
      System.out.print("Enter a size: (SMALL, MEDIUM, LARGE, EXTRA_LARGE) ");
      String input = in.next().toUpperCase();
      Size size = Enum.valueOf(Size.class, input);
      System.out.println("size=" + size);
      System.out.println("abbreviation=" + size.getAbbreviation());
      if (size == Size.EXTRA_LARGE)
         System.out.println("Good job--you paid attention to the _.");      
   }
}

enum Size
{
   SMALL("S"), MEDIUM("M"), LARGE("L"), EXTRA_LARGE("XL");

   private Size(String abbreviation) { this.abbreviation = abbreviation; }
   public String getAbbreviation() { return abbreviation; }

   private String abbreviation;
}

API: java.lang.Enun<E> 5

?static Enum value0f(Class enumClass, String name) 返回给定类中有指定名字的枚举常量。

String toString() 返回枚举常量名

int ordinal() 返回枚举常量在 enun声明中的位置,位置从0开始计数

int coapareTo(E other) 如果枚举常量出现在 other 之前,则返回一个负整数;如果 this=other,则返回0;否则,返回一个正整数。枚举常量的出现次序在 enun 声明中给出。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表