看到这个标题,很多人不禁要问---什么是枚举类而且为什么用枚举类呢?那是因为,一些方法在运行时,它需要的数据不能是任意的,而必须是一定范围内的值,此类问题在JDK5以前采用自定义带有枚举功能的类解决,Java5以后可以直接使用枚举予以解决。
举个简单的例子,我们每个人都有性别,分为“男”和“女”两种,为了限定这两种情况我们就必须限定这两种情况。下面就请大家看看怎样几种手动的实现枚举的方法:
Person类:
-
//手动实现枚举
-
public class Person {
-
private String sex;
-
//利用正则表达式来限制
-
public void setSex(String sex) {
-
if(sex.matches("[男女]")){
-
System.out.println("此性别可以识别!");
-
}else{
扫描二维码关注公众号,回复: 3943689 查看本文章 -
System.out.println("此性别不可识别!");
-
//throw new RuntimeException("此性别不可识别!");
-
}
-
}
-
public String toString() {
-
return "Person [sex=" + sex + "]";
-
}
-
}
测试类:
-
import domain.Person;
-
public class PersonTest {
-
public static void main(String[] args) {
-
Person p=new Person();
-
p.setSex("人妖");
-
System.out.println(p.toString());
-
}
-
}
输出效果:
手动实现枚举类:
通过private 将构造器隐藏起来
把这个类的所有可能实例都使用public static final 修饰
属性不应允许被改动, 所以应该使用 private final 修饰
Sex类:
-
public class Sex {
-
// 性别男
-
public static final Sex m = new Sex("男");
-
// 性别女
-
public static final Sex f = new Sex("女");
-
private final String value;
-
private Sex(String value) {
-
this.value = value;
-
}
-
// 让外界访问所定义的性别
-
public String getValue() {
-
return value;
-
}
-
}
测试类:
-
public class Sex {
-
// 性别男
-
public static final Sex m = new Sex("男");
-
// 性别女
-
public static final Sex f = new Sex("女");
-
private final String value;
-
private Sex(String value) {
-
this.value = value;
-
}
-
// 让外界访问所定义的性别
-
public String getValue() {
-
return value;
-
}
-
}
输出效果: