服务器之家

服务器之家 > 正文

Java枚举详解及使用实例(涵盖了所有典型用法)

时间:2019-12-17 13:40     来源/作者:junjie

在实际编程中,往往存在着这样的“数据集”,它们的数值在程序中是稳定的,而且“数据集”中的元素是有限的。

例如星期一到星期日七个数据元素组成了一周的“数据集”,春夏秋冬四个数据元素组成了四季的“数据集”。

在java中如何更好的使用这些“数据集”呢?因此枚举便派上了用场,以下代码详细介绍了枚举的用法。

?
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
package com.ljq.test;
 
/**
 * 枚举用法详解
 *
 * @author jiqinlin
 *
 */
public class TestEnum {
  /**
   * 普通枚举
   *
   * @author jiqinlin
   *
   */
  public enum ColorEnum {
    red, green, yellow, blue;
  }
  
  /**
   * 枚举像普通的类一样可以添加属性和方法,可以为它添加静态和非静态的属性或方法
   *
   * @author jiqinlin
   *
   */
  public enum SeasonEnum {
    //注:枚举写在最前面,否则编译出错
    spring, summer, autumn, winter;
 
    private final static String position = "test";
 
    public static SeasonEnum getSeason() {
      if ("test".equals(position))
        return spring;
      else
        return winter;
    }
  }
  
  /**
   * 性别
   *
   * 实现带有构造器的枚举
   *
   * @author jiqinlin
   *
   */
  public enum Gender{
    //通过括号赋值,而且必须带有一个参构造器和一个属性跟方法,否则编译出错
    //赋值必须都赋值或都不赋值,不能一部分赋值一部分不赋值;如果不赋值则不能写构造器,赋值编译也出错
    MAN("MAN"), WOMEN("WOMEN");
    
    private final String value;
 
    //构造器默认也只能是private, 从而保证构造函数只能在内部使用
    Gender(String value) {
      this.value = value;
    }
    
    public String getValue() {
      return value;
    }
  }
  
  /**
  * 订单状态
  *
  * 实现带有抽象方法的枚举
  *
  * @author jiqinlin
  *
  */
  public enum OrderState {
    /** 已取消 */
    CANCEL {public String getName(){return "已取消";}},
    /** 待审核 */
    WAITCONFIRM {public String getName(){return "待审核";}},
    /** 等待付款 */
    WAITPAYMENT {public String getName(){return "等待付款";}},
    /** 正在配货 */
    ADMEASUREPRODUCT {public String getName(){return "正在配货";}},
    /** 等待发货 */
    WAITDELIVER {public String getName(){return "等待发货";}},
    /** 已发货 */
    DELIVERED {public String getName(){return "已发货";}},
    /** 已收货 */
    RECEIVED {public String getName(){return "已收货";}};
    
    public abstract String getName();
  }
  
  public static void main(String[] args) {
    //枚举是一种类型,用于定义变量,以限制变量的赋值;赋值时通过“枚举名.值”取得枚举中的值
    ColorEnum colorEnum = ColorEnum.blue;
    switch (colorEnum) {
    case red:
      System.out.println("color is red");
      break;
    case green:
      System.out.println("color is green");
      break;
    case yellow:
      System.out.println("color is yellow");
      break;
    case blue:
      System.out.println("color is blue");
      break;
    }
    
    //遍历枚举
    System.out.println("遍历ColorEnum枚举中的值");
    for(ColorEnum color : ColorEnum.values()){
      System.out.println(color);
    }
    
    //获取枚举的个数
    System.out.println("ColorEnum枚举中的值有"+ColorEnum.values().length+"个");
    
    //获取枚举的索引位置,默认从0开始
    System.out.println(ColorEnum.red.ordinal());//0
    System.out.println(ColorEnum.green.ordinal());//1
    System.out.println(ColorEnum.yellow.ordinal());//2
    System.out.println(ColorEnum.blue.ordinal());//3
    
    //枚举默认实现了java.lang.Comparable接口
    System.out.println(ColorEnum.red.compareTo(ColorEnum.green));//-1
    
    //--------------------------
    System.out.println("===========");
    System.err.println("季节为" + SeasonEnum.getSeason());
    
    
    //--------------
    System.out.println("===========");
    for(Gender gender : Gender.values()){
      System.out.println(gender.value);
    }
    
    //--------------
    System.out.println("===========");
    for(OrderState order : OrderState.values()){
      System.out.println(order.getName());
    }
  }
  
}
标签:

相关文章

热门资讯

玄元剑仙肉身有什么用 玄元剑仙肉身境界等级划分
玄元剑仙肉身有什么用 玄元剑仙肉身境界等级划分 2019-06-21
男生常说24816是什么意思?女生说13579是什么意思?
男生常说24816是什么意思?女生说13579是什么意思? 2019-09-17
配置IIS网站web服务器的安全策略配置解决方案
配置IIS网站web服务器的安全策略配置解决方案 2019-05-23
Nginx服务器究竟是怎么执行PHP项目
Nginx服务器究竟是怎么执行PHP项目 2019-05-24
华为nova5pro和p30pro哪个好 华为nova5pro和华为p30pro对比详情
华为nova5pro和p30pro哪个好 华为nova5pro和华为p30pro对比详情 2019-06-22
返回顶部