java中的枚举,大家应该并不陌生。可enum的特性和用法,可能并不是很了解。enum的出现主要是为了代替public static final的常量的。因为常量有诸多的不便,包括没有命名空间,无法按组隔离,使用容易遗忘,扩展不便,没有编译时错误约束等。于是enum出现了,本文将介绍一些enum巧妙的用法。
本质上是一个final类,并且继承java.lang.Enum
当我们使用enum的时候,大部分人会用switch语句做判断而实现不同枚举使用不用的逻辑。例如以下一个计算器操作的例子:
这是一个很常见的例子,但是确有极大的隐患。比如计算器操作类增加一个枚举:RADICAL(“√ ̄”)根号,很多客户端的代码就需要改,而且很容易遗忘,因为没有编译时错误的约束。并且大量的switch case语句使得代码冗余,更不符合开闭原则。
只需要对枚举类稍加改造,增加一个抽象方法,即可改变以上种种的问题,代码如下:
当定义了一个抽象方法apply的时候,枚举必须实现这个抽象方法,不然会编译报错,不会造成新增加一个枚举而造成逻辑遗漏的问题。同时,客户端调用的代码页变得异常简单和优雅。
我们知道枚举本质是继承Enum的类,并且java是单继承的。因此我们可以使用接口,让枚举实现接口,来构建可伸缩的枚举类,代码如下:
这样的好处是当我们要扩充计算器操作枚举类是,来的很方便,代码如下: