在认识枚举之前,首先要了解多例设计模式,因为枚举是高级的多例设计。
多例是一个类自己创建有限多个实例化对象,而不能由外界new,所以多例类的构造方法不能用public,看一个多例模式的示例:
public class Color {
private String title;
private static final Color RED=new Color("红色");
private static final Color BLUE=new Color("蓝色");
private Color(String title){
this.title=title;
}
public static Color getInstance(int i){
switch (i){
case 1:return Color.RED;
case 2:return Color.BLUE;
default:return null;
}
}
@Override
public String toString() {
return this.title;
}
public static void main(String[] args) {
Color red=Color.getInstance(1);
System.out.println(red);
}
}
运行结果 :
红色
这个Color类有两个实例化对象,而且是由Color类自己创建的,他的构造方法已经被私有化,所以外界想获取Color类的实例化对象,只能通过Color的getInstance()方法获得,而不能由自己new。
接下来看一个枚举类:
public enum OneEnum {
Green("绿色"),Red("红色"),Yellow("黄色");
private String name;
private OneEnum(String name){
this.name=name;
}
@Override
public String toString() {
return this.name;
}
public static void main(String[] args) {
System.out.println(OneEnum.Green);
}
}
运行结果:
绿色
是不是很相像? 这里的Green("绿色")相当于多例中调用了自己的构造方法创建了一个Green对象,这个对象的name属性是“绿色”。
其中,enum是关键字,用enum修饰的类自动继承Enum抽象类。打开idea的showDiagrams可以看到idea的继承结构: