Java枚举类型是对类型安全枚举模式的语言级支持(语法糖)。
我遇到了一个问题,我计算一个数字,根据这个数字我必须调用一个特定的方法。我最终想到了创建一个枚举,其中每个元素调用另一个方法。正如本文所述https://stackoverflow.com/a/4280838/2426316
然而,这个答案的海报也提到,这不会被认为是一个很好的设计,所以我想知道我应该怎么做。使用这种设计来实现算法安全吗?如果没有,我还能做什么?
类型安全枚举模式和Java枚举类型(与C#枚举等其他解决方案相比)的优点之一是,它被设计为支持方法,甚至是抽象方法。
可能用途:
- 使用策略模式,但有一套固定策略的地方
- 用多态性替换switch语句(首选)
更多信息:
- 乔舒亚·布洛赫的《高效Java》。
- 第一版包括类型安全枚举模式
- 第二版包括Java Enum类型
- 重构,Martin Fowler著(例如用多态性替换条件)
安全可能不是问题所在。这是罕见的,但可能很难遵循。
我的建议是以两种方式之一围绕这一点进行构建:
- 使用ENUM,但不要在ENUM代码本身中包含函数调用。相反,有一个函数
explore(Level1 level){...}
,它有一个switch语句,通过传递的级别进行区分 - 使用Lambda表达式。这是一个更干净的解决方案,因为它允许您将函数作为参数传递;遗憾的是,在Java 8发布之前,Java本机不会支持这种方法。然而,有一些实现可以模拟Lambda表达式,最著名的可能是lambdaj