标签:
1、枚举的由来
假如有一个员工类
public class Employee {
public String id; // 编号
public String name; // 姓名
// 定义 员工角色 : 1、 BOSS 、 2 MANAGER 、3、WORKER (三选一)
//很久很久之前,没有枚举,采用int 常量代替,把员工角色定义到一个类中 可读性还可以,安全性很差 employee1.role1= 100; 造成程序错误
public int role1;
// 很久之前,人们自定义一个带有枚举功能类,采用对象来标识
public Role2 role2;
// JDK5 提供枚举 简化自定义枚举类写法
public Role3 role3;
public static void main(String[] args) {
//int常量标识不同的员工角色
Employee employee1 = new Employee();
employee1.role1 = Role1.BOSS;
//对象标识不同的员工角色
Employee employee2 = new Employee();
employee2.role2= Role2.BOSS;
//枚举来标识
Employee employee3 = new Employee();
employee3.role3= Role3.BOSS;
}
}
//int常量标识不同的员工角色
class Role1 {
public static final int BOSS = 1;
public static final int MANAGER = 2;
public static final int WORKER = 3;
}
//使用对象来标识不同的角色
class Role2{
public static final Role2 BOSS = new Role2();
public static final Role2 MANAGER = new Role2();
public static final Role2 WORKER = new Role2();
private role2(){}//私有构造器
}
// 枚举定义来标识
enum Role3 {
BOSS, MANAGER, WORKER;
// 构造器必须私有
private Role3() {}
}
2、枚举API的使用
定义一个枚举类:Hobby,比如音乐,运动,学习
enum Hobby{
MUSIC,SPORT,STUDY;
private Hobby(){}
}
根据已知的枚举对象的属性,获取其他的属性
public class EnumAPITest {
@Test
public void method_3(){
int index = 1;//已知枚举下标,获取枚举对象和名称
Hobby []hobbies = Hobby.values();//先获取所有的枚举对象数组
//获取枚举对象
Hobby hobby = hobbies[index];//根据下标找到枚举对象
System.out.println(hobby.name()); //SPORT
}
@Test
public void method_2(){
String name = "STUDY";//已知枚举名称,获取对象和下标
//通过枚举名称获得枚举对象,有两种方式
Hobby hobby = Hobby.valueOf(name);
Hobby hobby2 = Enum.valueOf(Hobby.class, name);
//有了对象就可以获取下标了
System.out.println(hobby.ordinal());//2
System.out.println(hobby2.ordinal());//2
}
@Test
public void method_1(){
Hobby hobby = Hobby.MUSIC;
//已知枚举对象,由枚举对象来获取枚举名称和下标
System.out.println(hobby.name());//MUSIC
System.out.println(hobby.ordinal());//0
}
}
3、枚举构造器有参数或枚举类中有抽象方法的情况
public class EnumTest {
public static void main(String[] args) {
Color color = Color.BLUE;
color.show();
}
}
//如果枚举构造器有参数,在枚举实例后 () 传入参数
//如果枚举有抽象方法,解决用匿名内部类 实现抽象方法
enum Color{
RED(3){
@Override
void show() {
System.out.println("hong");
}
},
BLUE(4){
@Override
void show() {
System.out.println("lan");
}
},
BLACK(5){
@Override
void show() {
System.out.println("hei");
}
};
private Color(int x){};
abstract void show();
}
以上很多都是依据当时学习时老师的范例,不管怎么说,希望对大家有所帮助!!!
标签:
原文地址:http://www.cnblogs.com/zhuangwf/p/5150672.html