Java的枚举和接口

Java中的枚举,不仅可以用来列举常量,而且可以实现接口。这第二点很重要,它使得枚举类型具备了多态的特性。但它又有一定的缺陷,特别是遇到枚不胜举的时候。

对于每一个新加入的枚举元素,他都必须实现接口中的所有方法。即便是在一个不大的接口的情形下,当元素数量增加到一定程度的时候,源文件就会变得相当巨大。虽然所有枚举元素,都是在实现同一类方法,但毕竟细节不同,所以把他们列在一起,影响阅读的欢乐性。除此之外,每次增加新的枚举元素,都要对此枚举文件进行修改,不符合开闭原则。

为了克服这个缺陷,我们可以尝试着,把不同的枚举元素放到不同的文件中,单独成型,并对接口进行实现。如此以来,新加的元素,就写在新的文件里,小而清晰,各自独立。

可这样的作法,有得必有失,那就是失去了,枚举类型中能获取所有类型那个静态函数,values()。

其实补救的方法还是有的,那就是创建一个新类,在里面手动添加新加入的元素,然后通过它进行索引。开闭原则遵守的再好,还是一定要找个切入口的,但口越小越好。

示例在此。看你能不能发现那个小口。