枚举几乎是所有编程语言都支持的类型,是Java诞生十多年后才追加的数据类型。
1. 多例设计模式与枚举
构造方法私有化;类内部提供若干个实例化对象,并通过static方法返回。
class Color{
private static final Color RED = new Color("Red");
private static final Color GREEN= new Color("Green");
private String title;
private Color(String title){
this.title = title;
}
public static Color getInstance(int ch){
switch(ch){
case 0: return RED;
case 1: return GREEN;
}
}
public String toString(){
return this.title;
}
}
上述代码是在JDK1.5之前经典的多例设计模式,其目的是:限制本类实例化对象的产生个数。但是从JDK1.5之后出现了枚举类型。上述代码就可以改写如下:
enum Color{
RED,GREEN,BLUE;
}
public class TestDemo{
public static void main(String args[]){
System.out.println(Color.BLUE);
}
}
实际上,所谓的枚举就是一种高级的多例设计。
2. Enum类
enum和Enum的区别
enum是一个关键字,使用enum定义的枚举类本质上就是一个类,而这个类继承了Enum抽象类。 因此,使用enum定义的枚举,其实就是一个经过包装过的class类而已。
- Enum类中的方法:
- 构造方法: protected Enum(String name, int ordinal)
- 取得枚举的名字:public final String name()
- 取得枚举的序号:public final String ordinal()
-
取得所有的枚举数据: public final String values()
当定义枚举对象 的时候,会自动设置序号和名字,由系统自动完成。
3. 枚举中定义其他结构
虽然枚举等同于多例设计,但是多例设计可以定义更多的属性和方法。于是,只依靠以上的概念,只能产生若干对象,但是没有办法定义更多的方法和属性。因此,在后续的JDK设计中,引入可以在枚举中定义属性和方法的支持。
示例:在枚举中定义更多属性和方法
- 如果要在枚举中定义很多内容,枚举对象必须写在第一行。
- 构造方法绝对不能使用public,且要随着构造方法的有无参数等设计,同步修改枚举对象。
- 需要覆写父类的Object方法
4. 枚举的使用
枚举使用场景基本都是那些可以有限举例出来的情况。如性别,星期等。
如果需要使用switch字符串的时候,可以考虑使用枚举代替。