Java枚举Enum在实际项目中也使用较为广泛的。最常用的是定义性别,如:
public enum Sex {
MAN,WOMEN
}
枚举类型是编程中的一个普通用语,可理解为 有限元素的集合。
枚举也是一种特殊的Java类。但也有较为特殊的地方:
(1)构造方法默认是无参的,并且是private的,也可以重写构造函数。
(2)可以在枚举中定义属性、方法。
(3)枚举类型的中成员都是静态、不可以改变的常量(public final static)。
上面的Sex枚举案例中,其默认构造函数是private的,无参的。
private Sex(){}
下面定义一个成绩等级枚举类型实例,分数85-100为EXCELIENT,75-85为GOOD,60-75为PASS,0-60为FAILURE。
定义成绩等级枚举类型Grade:
package com.eyugame.enumdemo;
/**
* 成绩等级枚举类型
*
* <pre>
* 分数85-100为EXCELIENT,75-85为GOOD,60-75为PASS,0-60为FAILURE。
* </pre>
*
* @author gerdan
*
*/
public enum Grade {
EXCELIENT(85, 100), GOOD(75, 85), PASS(60, 75), FAILURE(0, 60);
private int min;
private int max;
/**
* 构造方法,注意枚举的构造使用private修饰
* @param min 最小分数
* @param max 最大分数
*/
private Grade(int min, int max) {
this.max = max;
this.min = min;
}
public int getMin() {
return min;
}
public int getMax() {
return max;
}
/**
* 重写Enum的valueOf()方法
* 传入分数score,返回成绩等级
* Grade.values()获取全部的枚举成员
* @param score 分数
* @return 成绩等级
*/
public static Grade valueOf(int score){
for(Grade grade:Grade.values()){
if(score>grade.min && score<grade.max)
return grade;
}
return null;
}
}
测试类:
package com.eyugame.enumdemo;
/**
* 成绩等级测试
* @see com.eyugame.enumdemo.Grade
* @author gerdan
*
*/
public class GradeDemo {
public static void main(String[] args) {
//调用valueof()静态方法
Grade grade = Grade.valueOf(62);
switch (grade) {
case EXCELIENT:
System.out.println("优秀");
break;
case GOOD:
System.out.println("良好");
break;
case PASS:
System.out.println("及格");
break;
case FAILURE:
System.out.println("不及格");
break;
}
}
}
上面案例中,我们重写了vauleOf()方法,通过valueOf()传入一个分数,就可以返回相应的枚举常量,应该将分数转换成等级的操作定义在枚举内部。