Enum枚举类分析和相关拓展

Enum枚举类分析和相关拓展

其实我认为使用枚举类就是对使用常量的扩充,例如类中使用类型,分类相同的类变量的时候,可以考虑使用枚举类来替换掉。

参考了网上的文章,大致有两个好处,第一是确定传入的参数类型。而不是形参是int类型,随便一个int类型就能够满足。第二是对比static静态变量更能够确定变量的意义。下面举一个例子来看。

Enum类实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/* 列举简单的行驶工具 */
public enum trafficTool {
BIKE,CAR,BUS,TRAIN,AIRPLANE
}

public class TrafficToolTest {

public void chooseTool(TrafficTool trafficTool){
switch (trafficTool){
case BIKE:
System.out.println("自行车");break;
case CAR:
System.out.println("汽车");break;
}
}

public static void main(String[] args) {
TrafficToolTest trafficToolTest = new TrafficToolTest();
trafficToolTest.chooseTool(TrafficTool.BIKE);
}
}

和普通的类一样,同样也可以添加构造方法

1
2
3
4
5
6
7
8
9
10
SPRING("春天"),SUMMER("夏天"),FALL("秋天"),WINTER("冬天");

private final String name;

SeasonEnum(String name){
this.name = name;
}
String getName(){
return name;
}

也可以继承

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
public enum SeasonEnum {
SPRING("春天") {
@Override
public String comm() {
return "这是春天";
}
},SUMMER("夏天") {
@Override
public String comm() {
return "这是夏天";
}
},FALL("秋天") {
@Override
public String comm() {
return "这是冬天";
}
},WINTER("冬天") {
@Override
public String comm() {
return "这是冬天";
}
};

private final String name;

SeasonEnum(String name){
this.name = name;
}
String getName(){
return name;
}
public abstract String comm();
}

以上是枚举类的基本使用。

EnumMapEnumSet

public class EnumMap<K extends Enum<K>, V> extends AbstractMap<K, V> 这是关于EnumMap的继承关系。
可以发现这是key为枚举类的一个Map。

1
2
3
4
5
/* 简单创建,以后就可以实现枚举类的多种复用 */
EnumMap<SeasonEnum,Integer> enumIntegerEnumMap = new EnumMap<SeasonEnum, Integer>(SeasonEnum.class);
Set<SeasonEnum> set = enumIntegerEnumMap.keySet();
enumIntegerEnumMap.put(SeasonEnum.SPRING,1);
System.out.println(enumIntegerEnumMap.get(SeasonEnum.SPRING));

EnumSet 相对于 EnumMap 等同于 hashSet 相对于 HashMap 的存在,很好理解。

-------------本文结束感谢您的阅读-------------

本文标题:Enum枚举类分析和相关拓展

文章作者:NanYin

发布时间:2018年10月15日 - 22:10

最后更新:2019年08月12日 - 13:08

原始链接:https://nanyiniu.github.io/2018/10/16/2018-10-15-Enum%E7%B1%BB%E5%8F%8A%E7%9B%B8%E5%85%B3%E6%8B%93%E5%B1%95/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。