枚举Enum的使用
Java5开始引入枚举ENUM。
通常有下面七种情况。
表示常量的组合
| enum Signal {//信号灯
GREEN, YELLOW, RED
}
|
Enum可以在switch语句中使用
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 | enum Signal {
GREEN, YELLOW, RED
}
public class TrafficLight {
Signal color = Signal.RED;
public void change() {
switch (color) {
case RED;
color = Signal.GREEN;
break ;
case YELLOW;
color = Signal.RED;
break ;
case GREEN;
color = Signal.YELLOW;
break ;
;
;
}
|
Enum内部可以加自己的方法
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43 | public enum Color{
RED("红色",1),
GREEN("绿色",2),
BLANK("白色",3),
YELLOW("黄色",4);
//成员变量
private String name;
private int index;
private Color(String name,int index){
this.name = name;
this.index = index;
}
public static String getName(int index){
for (Color c : Color.values()) {
if(c.getIndex() == index) {
return c.name;
}
;
return null ;
;
public static Color getColor(int index){
for (Color c : Color.values()) {
if(c.getIndex() == index) {
return c;
}
;
return null ;
;
// get set 方法
public String getName() {
return name;
;
public void setName(String name) {
this .name = name;
;
public int getIndex() {
return index;
;
public void setIndex( int index) {
this .index = index;
;
}
|
可以重写Enum的toString()方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 | public enum Color {
RED("红色",1),
GREEN("绿色",2),
BLANK("白色",3),
YELLOW("黄色",4);
// 成员变量
private String name;
private int index;
private Color(String name, int index) {
this .name = name;
this .index = index;
}
@Override
public String toString() {
return this .index+ "_" + this .name;
}
}
|
实现接口
enum是以java.lang.enum类为基类的。不能继承别的类,但可以实现接口
-
定义一个接口Behaviour
| public interface Behaviour {
void print();
String getInfo();
}
|
-
实现Behaviour
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 | public enum Color implements Behaviour{
RED("赤色" , 1 ),
GREEN( "青色" , 2 ),
BLANK( "白色" , 3 ),
YELLOW( "黄色" , 4 );
private String name;
private int index;
private Color(String name, int index) {
this.name = name;
this.index = index;
}
@Override
public String getInfo() {
return this.name;
}
//接口方法
@Override
public void print() {
System.out.println(this.index+ ":" + this.name);
}
}
|
enum可以作为接口的成员
| public interface Food {
enum Coffee implements Food{
BLACK_COFFEE, DECAF_COFFEE, LATTE, CAPPUCCINO;
}
enum Dessert implements Food{
FRUIT, CAKE, GELATO;
}
}
|
enum的Collection的使用
- 有2种enum的Collection:java.util.EnumSet和java.util.EnumMap
- EnumSet内任意一个成员都不可重复。
- EnumMap的key为enum类型,但value可以是任意类型
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 | import java.util.EnumSet;
import java.util.Iterator;
public class Main {
public static void main(String[] args) {
EnumSet largeSize = EnumSet.of(Size.XL,Size.XXL,Size.XXXL);
for(Iterator it = largeSize.iterator();it.hasNext();){
Size size = (Size)it.next();
System.out.println(size);
}
}
}
enum Size {
S, M, L, XL, XXL, XXXL;
}
|