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>}
}
<pre name="code" class="java" style="color: rgb(69, 69, 69); font-size: 14px; line-height: 24px;">//输出结果为:
Mon====>MondayTue====>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) { } } |
这时候用构造函数才优雅。
来源:CSDN
作者:lzxomg
链接:https://blog.csdn.net/lzxomg/article/details/51925741