枚举类
有时候变量的取值只在一个有限的集合内。例如销售的服装只有小、中、大和超大这四种尺寸。只对这种情况可以自定义枚举类型。
枚举类型包括有限个命名的值。例如:
enum Size
{
SMALL,MEDIUM,LARGE,EXTRA_LARGE;
}
现在,可以声明这种类型的变量:
Size s = Size.EXTRA_LARGE;
Size类型的变量只能存储在这个类型声明中给定的某个枚举值,或者null值,null值表示这个变量没有设置任何值。
实际上这个声明定义的是一个类,它刚好有4个实例,因此在比较两个枚举类型的值时,永远不要调用equals,而直接使用“==”就可以了。
如果需要的话,可以再枚举类型中添加一些构造器,方法和域。例如:
public class EnumTest {
enum Size
{
SMALL("S"), MEDIUM("M"), LARGE("L"), EXTRA_LARGE("XL");
private String abbreviation;
private Size(String abbreviation)
{
this.abbreviation = abbreviation;
}
public String getAbbreviation() {
return abbreviation;
}
}
}
所有的枚举类型都是Enum类的子类。他们继承了这个类的许多方法。其中最有用的是toString,这个方法能返回枚举常量名。toString的逆方法是静态方法valueOf。例如:
Size s = Enum.valueOf(Size.class,"SMALL");
将s设置成Size.SMALL。
每个枚举类型都有一个静态的values方法,它将返回一个包含全部枚举类型的数组。例如:
Size[] values = Size.values();
它将返回包含元素Size.SMALL,Size.MEDIUM,Size.LARGE,Size.EXTRA_LARGE的数组。
package enums;
import java.util.Scanner;
public class EnumTest {
enum Size
{
SMALL("S"), MEDIUM("M"), LARGE("L"), EXTRA_LARGE("XL");
private String abbreviation;
private Size(String abbreviation)
{
this.abbreviation = abbreviation;
}
public String getAbbreviation() {
return abbreviation;
}
}
public static void main(String[] args) {
Scanner 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 _.");
}
}