java枚举应用场景_java中枚举的应用场景有哪些?详细解析

java中枚举所能覆盖的范围是十分广阔的,它的应用场景也是很多。关于java枚举的知识是非常多的。今天就来介绍一下,枚举的应用场景有哪些?一起来了解一下吧。

一、首先是组织常量

在JDK1.5 之前,在Java中定义常量都是public、static、final、TYPE、a;

这样的形式。有了枚举,你可以将有关联关系的常量组织起来,使代码更加易读、安全,并且还可以使用枚举提供的方法。

枚举声明的格式

注:如果枚举中没有定义方法,也可以在最后一个实例后面加逗号、分号或什么都不加。

下面三种声明方式是等价的,代码如下所示:enum Color

{

RED

, GREEN

, BLUE

}

enum Color

{

RED

, GREEN

, BLUE

, }

enum Color

{

RED

, GREEN

, BLUE;

}

二、然后是switch 状态机

我们经常使用switch语句来写状态机。JDK7以后,switch已经支持int、char、String、enum类型的参数。这几种类型的参数比较起来,使用枚举的switch代码更具有可读性。代码如下所示:enum Signal

{

RED

, YELLOW

, GREEN

}

public static String getTrafficInstruct(Signal signal)

{

String instruct = "信号灯故障";

switch (signal)

{

case RED:

instruct = "红灯停";

break;

case YELLOW:

instruct = "黄灯请注意";

break;

case GREEN:

instruct = "绿灯行";

break;

default:

break;

}

return instruct;

}

三、接下来是组织枚举

可以将类型相近的枚举通过接口或类组织起来。

但是一般用接口方式进行组织。

原因是:Java接口在编译时会自动为enum类型加上public、static修饰符;Java类在编译时会自动为enum类型加上static修饰符。看出差异了吗?没错,就是说,在类中组织enum,如果你不给它修饰为public,那么只能在本包中进行访问。

举例:在接口中组织enum,代码如下所示:public interface Plant

{

enum Vegetable implements INumberEnum

{

POTATO(0, "土豆")

, TOMATO(0, "西红柿");

Vegetable(int number, String description)

{

this.code = number;

this.description = description;

}

private int code;

private String description;

@Override

public int getCode()

{

return 0;

}

@Override

public String getDescription()

{

return null;

}

}

enum Fruit implements INumberEnum

{

APPLE(0, "苹果")

, ORANGE(0, "桔子")

, BANANA(0, "香蕉");

Fruit(int number, String description)

{

this.code = number;

this.description = description;

}

private int code;

private String description;

@Override

public int getCode()

{

return 0;

}

@Override

public String getDescription()

{

return null;

}

}

}

四、最后是策略枚举

EffectiveJava中展示了一种策略枚举。这种枚举通过枚举嵌套枚举的方式,将枚举常量分类处理。

这种做法虽然没有switch语句简洁,但是更加安全、灵活。

例:EffectvieJava中的策略枚举范例,代码如下所示:enum PayrollDay

{

MONDAY(PayType.WEEKDAY), TUESDAY(PayType.WEEKDAY), WEDNESDAY(

PayType.WEEKDAY), THURSDAY(PayType.WEEKDAY), FRIDAY(PayType.WEEKDAY), SATURDAY(

PayType.WEEKEND), SUNDAY(PayType.WEEKEND);

private final PayType payType;

PayrollDay(PayType payType)

{

this.payType = payType;

}

double pay(double hoursWorked, double payRate)

{

return payType.pay(hoursWorked, payRate);

}

// 策略枚举

private enum PayType

{

WEEKDAY

{

double overtimePay(double hours, double payRate)

{

return hours <= HOURS_PER_SHIFT ? 0 : (hours - HOURS_PER_SHIFT) *

payRate / 2;

}

}

, WEEKEND

{

double overtimePay(double hours, double payRate)

{

return hours * payRate / 2;

}

};

private static final int HOURS_PER_SHIFT = 8;

abstract double overtimePay(double hrs, double payRate);

double pay(double hoursWorked, double payRate)

{

double basePay = hoursWorked * payRate;

return basePay + overtimePay(hoursWorked, payRate);

}

}

}

测试,代码如下所示:System.out.println("时薪100的人在周五工作8小时的收入:" + PayrollDay.FRIDAY.pay(8.0, 100));

System.out.println("时薪100的人在周六工作8小时的收入:" + PayrollDay.SATURDAY.pay(8.0, 100));

java中枚举的应用场景主要有以上这四种,都用实际的代码为大家展示出来了,还是很简单易懂的。想要了解更多java经典例子敬请关注奇Q工具网。

推荐阅读:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值