一、枚举是什么?
枚举(Enum)类型是Java SE5中新增的一种特殊类型,它是一种包含固定常量的特殊类。枚举常量在枚举类型中以逗号分隔形式列出来,并以分号结束。枚举常量默认是static和final的,无法修改。
二、如何定义一个枚举?
Java中定义枚举常量需要使用关键字enum,枚举类本身也是一个常规的Java类。下面是定义一个颜色枚举的示例代码:
public enum Color {
RED, GREEN, BLUE;
}
在这个枚举类型中,包含了3个颜色常量。这3个枚举常量是Color类型的实例,它们分别代表了红色、绿色和蓝色。
三、枚举可以做什么?
1、枚举类型的遍历
枚举类型可以很方便地遍历所有枚举常量。下面是一个遍历Color枚举类型的示例代码:
for (Color c : Color.values()) {
System.out.println(c);
}
上述代码将输出RE、GREEN、BLUE,即枚举类型中的所有枚举常量。
2、枚举类型的switch语句
枚举类型可以作为switch语句的选择器。下面是一个使用switch语句处理Color枚举类型的示例代码:
switch (color) {
case RED:
System.out.println("This is RED color");
break;
case GREEN:
System.out.println("This is GREEN color");
break;
case BLUE:
System.out.println("This is BLUE color");
break;
default:
System.out.println("No color match");
}
在这个示例中,switch语句选择color变量作为选择器进行处理。根据color变量的取值,分别输出相应的颜色。
3、枚举类型的实现接口
枚举类型可以像其他Java类一样实现接口,每个枚举常量都是该枚举类型的一个实例,并且具有相同的方法。下面是一个实现接口的Color枚举类型的示例代码:
public interface ColorInterface {
void printColor();
}
public enum Color implements ColorInterface {
RED {
public void printColor() {
System.out.println("I am RED color");
}
},
GREEN {
public void printColor() {
System.out.println("I am GREEN color");
}
},
BLUE {
public void printColor() {
System.out.println("I am BLUE color");
}
}
}
上述代码定义了一个ColorInterface接口和一个实现该接口的Color枚举类型。每个枚举常量都是该枚举类型的一个实例,并且重写了printColor方法,输出相应的颜色。
四、枚举的高级用法
1、枚举可以具有自己的属性和方法
枚举类型可以像Java类一样具有自己的属性和方法。下面是一个定义自己颜色值的Color枚举类型的示例代码:
public enum Color {
RED("#FF0000"),
GREEN("#00FF00"),
BLUE("#0000FF");
private String value;
Color(String value) {
this.value = value;
}
public String getValue() {
return value;
}
}
在这个示例中,每个枚举常量都有自己的value属性代表颜色值,并且拥有获取value值的方法getValue()。
2、枚举可以根据不同属性排序
枚举类型可以通过实现Comparable接口进行排序。下面是一个根据枚举常量自身属性排序的Color枚举类型的示例代码:
public enum Color implements Comparable{
RED("#FF0000"),
GREEN("#00FF00"),
BLUE("#0000FF");
private String value;
Color(String value) {
this.value = value;
}
public String getValue() {
return value;
}
@Override
public int compareTo(Color o) {
return this.value.compareTo(o.value);
}
}
在这个示例中,Color枚举类型实现了Comparable接口,并且根据枚举常量的value属性进行排序。
3、枚举可以进行序列化和反序列化
枚举类型可以进行序列化和反序列化。下面是一个将Color枚举类型序列化和反序列化的示例代码:
public class EnumTest {
public static void main(String[] args) {
ObjectOutputStream oos = null;
ObjectInputStream ois = null;
try {
oos = new ObjectOutputStream(new FileOutputStream("color.txt"));
oos.writeObject(Color.RED);
ois = new ObjectInputStream(new FileInputStream("color.txt"));
Color color = (Color) ois.readObject();
System.out.println(color);
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} finally {
try {
oos.close();
ois.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
在这个示例中,Color枚举类型被序列化到文件color.txt中,然后将该文件中的数据反序列化为Color对象,并输出该对象。
原创文章,作者:OSZNZ,如若转载,请注明出处:https://www.506064.com/n/325346.html
微信扫一扫
支付宝扫一扫