Java Enum 枚举类型

大憨熊 提交于 2019-12-06 02:21:41

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====>Monday
Tue====>Tuesday
Wed====>Wednesday
Thu====>Thursday
Fri====>Friday
Sat====>Saturday
Sun====>Sunday


如果只是个1,2个常量 ,就别用构造函数,直接

Java code
?
1
2
3
enum FruitEnum {
    APPLE, ORANGE;
}

当还有其他值得时候用构造函数如下:
Java code
?
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) {
         
    }
}

这时候用构造函数才优雅。
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!