一、enum概述。
Java 代码的两个基本的构造块是类和接口。现在 Tiger 又引入了枚举,一般简称它为 enum。这个新类型允许您表示特定的数据点,这些数据点只接受分配时预先定义的值集合。 当然,熟练的程序员可以用静态常量实现这项功能。如:
- public class OldGrade {
- public static final int A = 1;
- public static final int B = 2;
- public static final int C = 3;
- public static final int D = 4;
- public static final int F = 5;
- public static final int INCOMPLETE = 6;
- }
但是, 这类常量是 Java 中 int 类型的常量,这意味着该方法可以接受任何 int 类型的值,即使它和OldGrade 中定的所有级别都不对应。因此,您需要检测上界和下界,在出现无效值的时候,可能还要包含一个 IllegalArgumentException。而且,如果后来又添加另外一个级别(例如OldGrade.WITHDREW_PASSING),那么必须改变所有代码中的上界,才能接受这个新值。
二、实例。
1、Color 类。
package enums;
public enum Color {
RED(255,0,0),BLUE(0,0,255),BLACK(0,0,0),YELLOW(255,255,0),GREEN(0,255,0);
private Color(int rv,int gv,int bv){
this.redValue=rv;
this.greenValue=gv;
this.blueValue=bv;
}
public String toString(){ //自定义的public方法
return super.toString()+"("+redValue+","+greenValue+","+blueValue+")";
}
public void doSomethint(){
switch(this){
case RED:System.out.println("red...........");break;
case BLUE:System.out.println("blue...........");break;
case BLACK:System.out.println("black...........");break;
case YELLOW:System.out.println("yellow...........");break;
default:System.out.println("end...........");
}
}
private int redValue;
private int greenValue;
private int blueValue;
}
2、Client类。
package enums;
import java.util.EnumMap;
public class Client {
public static void main(String[] args){
Color red = Color.valueOf("RED");
System.out.println(red);
Color[] colors = Color.values();
for(int i = 0;i<colors.length;i++){
System.out.println(colors[i]);
}
System.out.println("比较:"+red.compareTo(Color.YELLOW));
System.out.println("name:"+red.name());
System.out.println("位置:"+red.ordinal());
red.doSomethint();
System.out.println("");
System.out.println("");
System.out.println("EnumMap............");
EnumMap Colormap = new EnumMap(Color.class);
Colormap.put(Color.RED, "RED..........");
Colormap.put(Color.BLACK, "RED..........");
Colormap.put(Color.BLUE, "RED..........");
Colormap.put(Color.YELLOW, "RED..........");
Colormap.put(Color.GREEN, "RED..........");
for (Color color : Color.values() ) {
System.out.println("color is: " + color + ", massage is: " + Colormap.get(color));
}
}
}
3、结果。
RED(255,0,0)
RED(255,0,0)
BLUE(0,0,255)
BLACK(0,0,0)
YELLOW(255,255,0)
GREEN(0,255,0)
比较:-3
name:RED
位置:0
red...........
EnumMap............
color is: RED(255,0,0), massage is: RED..........
color is: BLUE(0,0,255), massage is: RED..........
color is: BLACK(0,0,0), massage is: RED..........
color is: YELLOW(255,255,0), massage is: RED..........
color is: GREEN(0,255,0), massage is: RED..........