Java Enum
Enum 一般用来表示一组相同类型的常量。如性别、日期、月份、颜色等。对这些属性用常量的好处是显而易见的,不仅可以保证单例,且比较时候可以用 ”==” 来替换 equals 。是一种好的习惯。 JDK1.5 之前没有 Enum 这个类型。
枚举类型安全,可以不让非法的数据作为参数传入。
枚举是类,可以实现接口,并且是常用的实例化控制手段(可以理解为对象池),很多单例写成枚举。
还可以在枚举中声明抽象方法,在不同的枚举值中实现该方法,以达到工厂方法的目的。
如何使用 Java Enum
简单的用法: JavaEnum 简单的用法一般用于代表一组常用常量,可用来代表一类相同类型的常量值。如:
//性别 public enum SexEnum { male , female ; } //颜色 public enum Color { RED , BLUE,GREEN,BLACK ; }
枚举对象里面的值都必须是唯一的。
可以通过 Enum 类型名直接引用该常量,如 SexEnum.male,Color.RED.
复杂用法: Java 为枚举类型提供了一些内置的方法,同事枚举常量还可以有自己的方法。可以很方便的遍历枚举对象,看个下面的例子:
//WeekDay.java /** * @author admin 定义一个枚举类型,代表星期一到星期日的7个缩写常量 同时还定义了枚举类型的属性day,该属性可以是final,也可是变量 * 同时还定义了该枚举类型的一个方法printDay */ enum WeekDay { <span style="white-space:pre"> </span>Mon("Monday"), Tue("Tuesday"), Wed("Wednesday"), Thu("Thursday"), Fri("Friday"), Sat("Saturday"), Sun("Sunday"); <span style="white-space:pre"> </span>/** 定义枚举类型自己的属性 **/ <span style="white-space:pre"> </span>private final String day; <span style="white-space:pre"> </span>private WeekDay(String day) { <span style="white-space:pre"> </span>this.day = day; <span style="white-space:pre"> </span>} <span style="white-space:pre"> </span>public String getDay() { <span style="white-space:pre"> </span>return day; <span style="white-space:pre"> </span>} <span style="white-space:pre"> </span>/*//定义枚举类型自己的方法 <span style="white-space:pre"> </span>public static void printDay(int i) { <span style="white-space:pre"> </span>switch (i) { <span style="white-space:pre"> </span>case 1: <span style="white-space:pre"> </span>System.out.println(WeekDay.Mon); <span style="white-space:pre"> </span>break; <span style="white-space:pre"> </span>case 2: <span style="white-space:pre"> </span>System.out.println(WeekDay.Tue); <span style="white-space:pre"> </span>break; <span style="white-space:pre"> </span>case 3: <span style="white-space:pre"> </span>System.out.println(WeekDay.Wed); <span style="white-space:pre"> </span>break; <span style="white-space:pre"> </span>case 4: <span style="white-space:pre"> </span>System.out.println(WeekDay.Thu); <span style="white-space:pre"> </span>break; <span style="white-space:pre"> </span>case 5: <span style="white-space:pre"> </span>System.out.println(WeekDay.Fri); <span style="white-space:pre"> </span>break; <span style="white-space:pre"> </span>case 6: <span style="white-space:pre"> </span>System.out.println(WeekDay.Sat); <span style="white-space:pre"> </span>break; <span style="white-space:pre"> </span>case 7: <span style="white-space:pre"> </span>System.out.println(WeekDay.Sun); <span style="white-space:pre"> </span>break; <span style="white-space:pre"> </span>default: <span style="white-space:pre"> </span>System.out.println("wrong number!"); <span style="white-space:pre"> </span>} <span style="white-space:pre"> </span>}*/ } // WeekDayTest.java public class WeekDayTest { <span style="white-space:pre"> </span>public static void main(String args[]) { <span style="white-space:pre"> </span>for (WeekDay d : WeekDay.values()) { <span style="white-space:pre"> </span>System.out.println(d + "====>" + d.getDay()); <span style="white-space:pre"> </span>} <span style="white-space:pre"> </span>//WeekDay.printDay(5); <span style="white-space:pre"> </span>} }
Mon====>Monday<pre name="code" class="java" style="color: rgb(69, 69, 69); font-size: 14px; line-height: 24px;">//输出结果为:
Tue====>Tuesday
Wed====>Wednesday
Thu====>Thursday
Fri====>Friday
Sat====>Saturday
Sun====>Sunday
如果只是个1,2个常量 ,就别用构造函数,直接
1
2
3
|
enum
FruitEnum {
APPLE, ORANGE;
}
|
当还有其他值得时候用构造函数如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
enum
FruitEnum {
APPLE(
1
,
"红色"
), ORANGE(
2
,
"黄色"
);
private
int
value =
0
;
private
String desc;
private
FruitEnum(
int
value,String desc) {
this
.value = value;
this
.desc = desc;
}
public
static
FruitEnum valueOf(
int
value) {
for
(FruitEnum f:FruitEnum.values()) {
if
(f.value==value)
return
f;
}
return
null
;
}
public
int
value() {
return
this
.value;
}
public
static
void
main(String[] args) {
}
}
|
这时候用构造函数才优雅。