18、枚举

学习目标:

1、了解枚举的概念

2、掌握枚举类enum的定义

3、能在项目中灵活的使用枚举类

学习过程:

一、什么是枚举

枚举类型主要提供固定的、规范化的一些常数(public static final),是一种自定义的基本数据类型,当我们需要声明一组命名的常数,而且这个变量只有几种可能的取值时,那么就可以将它定义为枚举类型。常见的有简单的枚举:

二、枚举的应用

枚举一般可以作为替换我们一直经常使用常量的用法,使用枚举会是代码更加清晰,容易维护,而且枚举类型支持switch、可以定义方法等等。所以枚举比常量更好用。

比如我们下面这个例子:

“场地有场地id、场地名称cname、场地描述cname和状态cond等几个属性,其中场地的状态使用:0 表示空闲,1 表示在用,2 表示维护。只能有这三个状态选项”。

那么我们如何设计一个javaBean表示上面这个场地对象呢?基本属性应该没有问题,关键是状态如何描述。

1、使用常量。为了更好的表示和提高代码的阅读性,我们可以定义几个常量表示场地的状态的几个选择,代码如下:

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

public class Space {

 

    // 0表示空闲 1表示在用 2表示维护

    public static final int FREE=0;

    public static final int USING=1;

    public static final int REPIRE=2;

 

    private int id;

    private String cname;

    private String cdesc;

    private int cond;

 

    public int getId() {

        return id;

    }

 

    public void setId(int id) {

        this.id = id;

    }

 

    public String getCname() {

        return cname;

    }

 

    public void setCname(String cname) {

        this.cname = cname;

    }

 

    public String getCdesc() {

        return cdesc;

    }

 

    public void setCdesc(String cdesc) {

        this.cdesc = cdesc;

    }

 

    public int getCond() {

        return cond;

    }

 

    public void setCond(int cond) {

        this.cond = cond;

    }

 

}

我们定义场地对象时候,设置场地的状态就可以使用常量的表示,不用使用无意义的数字了,代码如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

 public class Run {

     

    public static void main(String[] args) {

         

        Space s1=new Space();

        s1.setId(1);

        s1.setCname("场地1");

        s1.setCdesc("羽毛球场地");

         

        s1.setCond(Space.FREE);

         

    }

 

}

使用常量对于少数的几个状态还是很实用的,但是使用常量也有几个问题:不利于代码的维护,代码重用性不强;如果状态很多,那么定义的常量也会很多;并不能限制状态就只能有这几个选项,比如上面的例子我们设置状态数据为100:s1.setCond(100),代码也没有错误,但是这么明显不符合逻辑。使用枚举可以很好的解决上面的这些问题。

2、改用枚举。定义一个枚举类。

1

2

3

4

5

public enum State {

 

    Free, Using, Repair;

 

}

修改Space类的cond属性的类型为该枚举类型。删除原来的所有的常量定义。代码如下:

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

  public class Space {

 

    // 0表示空闲 1表示在用 2表示维护

    /*public static final int FREE=0;

    public static final int USING=1;

    public static final int REPIRE=2;*/

 

    private int id;

    private String cname;

    private String cdesc;

    private State cond;//修改为枚举类型

 

    public int getId() {

        return id;

    }

 

    public void setId(int id) {

        this.id = id;

    }

 

    public String getCname() {

        return cname;

    }

 

    public void setCname(String cname) {

        this.cname = cname;

    }

 

    public String getCdesc() {

        return cdesc;

    }

 

    public void setCdesc(String cdesc) {

        this.cdesc = cdesc;

    }

 

    public State getCond() {

        return cond;

    }

 

    public void setCond(State cond) {

        this.cond = cond;

    }

 

}

这时候在定义Space对象的cond属性就只能是枚举的几个属性了。那么状态原来几个数字表示如何获得呢?下面我们可以为这个枚举添加方法。

3、为枚举添加方法。

修改枚举类

1

2

3

4

5

6

7

8

9

10

11

public enum State {

    //调用枚举的构造方法

    Free(0),Using(1),Repair(2),Other(3);

     

    public int value;

     

    State(int value){

        this.value=value;

    }

 

}

在Run类中就可以通过value获得对应的数字了。

1

2

3

4

5

6

7

8

9

10

11

12

13

public class Run {

    public static void main(String[] args) {

        Space s1=new Space();

        s1.setId(1);

        s1.setCname("场地1");

        s1.setCdesc("羽毛球场地");

         

        s1.setCond(State.Repair);//限制只能是枚举的几个选项

         

        System.out.println(s1.getCond().value);

         

    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值