java枚举详解

jdk5.0以前大家是这样实现枚举的
public class Student {
private String Name;
public String getName() {
return Name;
}
public void setName(String name) {
Name = name;
}
public String getGrade() {
return grade;
}
public void setGrade(String grade) {
if(!Grade.matches("[ABCDE]")) {
throw new RuntimeException(“非法数值”);
}
grade = grade;
}
private String grade;
}
这样的话还是有不合适地方,不能限制用户输入啊,所以演变成下面的样子
我们可以吧grade当做一个类
如下:
public class Grade {
private Grade() {} //构造方法一定是私有的,防止外部去new它
public static Grade A=new Grade();
public static Grade B=new Grade();
public static Grade C=new Grade();
public static Grade D=new Grade();
public static Grade E=new Grade();
}

测试类:
Student student=new Student();
student.setName(“GM”);
student.setGrade(Grade.A);//这里就限制了

5.0有了枚举之后
enum Grade{A,B,C,D,E;}
相当于
public class Grade {
private Grade() {} //构造方法一定是私有的,防止外部去new它
public static Grade A=new Grade();
public static Grade B=new Grade();
public static Grade C=new Grade();
public static Grade D=new Grade();
public static Grade E=new Grade();
}

进一步,有了枚举,但我们想一个分数段代表一个A或者B,我们可以在枚举中引入字段
如下:
enum Grade{
A(“100-90”),B(“90-80”),C(“80-70”),D(“70-60”),E(“不及格”);
private String value;
private Grade(String value) {
this.value=value;
}
public String getValue() {
return value;
}
测试如下:
@Test
public void test1() {
// TODO Auto-generated method stub
Student student=new Student();
student.setName(“GM”);
student.setGrade(Grade.A);
Grade grade=student.getGrade();
String valueString=grade.getValue();
System.out.println(valueString);
}

在进阶,每个分数代表不同含义(在枚举中加入抽象方法,这样在创建每一个实例时都必须实现它)
枚举如下:
enum Grade{
A(“100-90”){
@Override
public String toLocalName() {
// TODO Auto-generated method stub
return “优秀”;
}
},B(“90-80”) {
@Override
public String toLocalName() {
return “良好”;
}
},C(“80-70”) {
@Override
public String toLocalName() {
return “凑活吧”;
}
},D(“70-60”) {
@Override
public String toLocalName() {
return “刚及格”;
}
},E(“不及格”) {
@Override
public String toLocalName() {
return “不及格”;
}
};
private String value;
private Grade(String value) {
this.value=value;
}
public String getValue() {
return value;
}
public abstract String toLocalName();//定义抽象方法
}

测试类:
Student student=new Student();
student.setName(“GM”);
student.setGrade(Grade.B);
Grade grade=student.getGrade();
String valueString=grade.getValue();
System.out.println(valueString);
String localString=grade.toLocalName();
System.out.println(localString);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值