您的位置:首页 > 编程语言 > Java开发

Java 枚举(enum)的用法

2016-06-07 09:08 537 查看

概述

枚举是在JDK 1.5 时引入的类型。创建枚举类型要使用关键字enum,隐含了所创建的类型都是java.lang.Enum类的子类。枚举类型中的每一个值都将映射到 protected Enum(String name, int ordinal) 构造函数中,在这里,每个值的名称都被转换成一个字符串,并且序数的值表示了被创建的顺序。

简单枚举定义常量

enum Colors {
RED, GREEN, YELLOW, GRAY;
}

public class Main {

public static void main(String args[]) {

Colors color = Colors.GRAY;

System.out.println(color.name()); //返回此枚举列表常量的名称

//用于 switch 条件的判断
switch (color) {
case RED:
System.out.println("this is red color");
break;
case GREEN:
System.out.println("this is red green");
break;
case YELLOW:
System.out.println("this is red yellow");
break;
case GRAY:
System.out.println("this is red gray");
break;
}

System.out.println(color.ordinal()); // 结果为3:返回枚举列表常量在枚举中的索引位置,从0开始

for(Colors c : Colors.values()){     // values()可以获得枚举列表常量值的数组
System.out.println(c);
}

}
}


在枚举中自定义属性和方法

enum Colors {
//枚举列表常量通过括号赋值时,必须要有对应参数的构造函数,否则编译出错。
//枚举列表常量必须统一赋值,或者不赋值,否则编译出错
RED("红色",1), GREEN("绿色",2), YELLOW("黄色",3), GRAY("灰色",4);

private String name;
private int id;

//构造方法里面的参数类型与枚举列表中参数类型一致
private Colors(String name , int id) {
this.name = name;
this.id = id;
}

public String getName() {
return name;
}

public int getId() {
return id;
}
//通过id,获得name值
public static String getName(int id){

for (Colors color : Colors.values()) {
if(color.id == id){
return color.name;
}
}
return null;
}
}

public class Main {

public static void main(String args[]) {

System.out.println(Colors.getName(3));
}
}


EnumSet和EnumMap的应用

public static void main(String args[]) {

//创建一个枚举集合包含所有在指定元素类型的元素
EnumSet<Colors> colorSet = EnumSet.allOf(Colors.class);

Iterator<Colors> iterator= colorSet.iterator();
while(iterator.hasNext()){
System.out.println(iterator.next().getId());
}

EnumMap<Colors, String> colorMap = new EnumMap<Colors, String>(Colors.class);
colorMap.put(Colors.RED, "红色");
colorMap.put(Colors.GREEN, "绿色");
colorMap.put(Colors.YELLOW, "黄色");
colorMap.put(Colors.GRAY, "灰色");

Iterator<Entry<Colors, String>> it = colorMap.entrySet().iterator();
while(it.hasNext()){
System.out.println(it.next().getKey());
}
}


枚举的特性:

1.不能有public的构造函数,这样可以保证客户代码没有办法新建一个enum的实例。

2.所有的枚举值都是public,static,final的。

3.Enum默认实现了java.lang.Comparable接口

4.重写了toString方法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java enum