1.枚举
1.1.枚举问题引出
要讲枚举,首先要回顾多例设计模式
,多例设计模式如下:构造方法私有化,类内部需要提供若干个实例化对象,后面通过static方法返回
,示例如下:
class Color {
private String title;
public static final int RED_FLAG = 1;
public static final int GREEN_FLAG = 2;
public static final int BLUE_FLAG = 3;
private static final Color RED = new Color("RED");
private static final Color GREEN = new Color("GREEN");
private static final Color BLUE = new Color("BLUE");
public Color(String title) {
this.title = title;
}
public static Color getInstance(int ch) {
switch(ch){
case RED_FLAG:
return RED;
case GREEN_FLAG:
return GREEN;
case BLUE_FLAG:
return BLUE;
default:
return null;
}
}
@Override
public String toString() {
return this.title;
}
}
public class Test {
public static void main(String[] args) {
System.out.println(Color.getInstance(Color.BLUE_FLAG ));
}
}
//BLUE
以上做法是是在JDK1.5以前的做法,这样做的目的是限制本类实例化对象产生的个数,但是从1.5开始有了枚举,以上代码可以用枚举来取代,示例代码如下:
enum Color {
RED,BLUE,GREEN
}
public class Test {
public static void main(String[] args) {
System.out.println(Color.BLUE);
}
}
//BLUE
实际上枚举就是一种高级的多例设计模式
1.2.Enum类
虽然JDK1.5提供了enumeration关键字,但是enum并不是一种新的结构,相反,它只是一种对类型的封装:使用enum关键字定义的枚举类型本质上相当于一个Class定义的类,继承了java.lang.Enum父类
,在Enum类中有以下的方法:
- 构造方法
protected Enum(String name, int ordinal)
- 取得枚举姓名
public final String name()
- 取得枚举序号
public final int ordinal()
上述方法的使用示例代码如下:
enum Color {
RED,BLUE,GREEN
}
public class Test {
public static void main(String[] args) {
System.out.println(Color.BLUE.ordinal() + "=" + Color.BLUE.name());
}
}
//1=BLUE
通过上述代码可以发现,枚举类默认继承Enum类
。在枚举中还有一个方法可以取得所有枚举数据
:values()
,返回值是一个枚举的对象数组
,取得所有枚举数据示例代码如下:
enum Color {
RED,BLUE,GREEN
}
public class Test {
public static void main(String[] args) {
for (Color temp:Color.values()) {
System.out.println(temp.ordinal() + "=" + temp.name());
}
}
}
//0=RED
//1=BLUE
//2=GREEN
!!!请解释enum和Enum的区别?
enum是一个关键字,使用enum定义的枚举实际上就相当于一个类继承了Enum这个抽象类而已。
1.3.枚举中定义其他内容
虽然枚举等同于多例设计,但是多例设计是在一个类中产生的,所有该类中可以定义更多的属性和方法,所以在设计枚举时考虑到这些因素,提出了更为全面的设计方案:可以在枚举中定义属性、方法、实现接口
。在枚举中定义更多的结构示例代码如下: