使用Java枚举调用其他方法是不是设计不好



我遇到了一个问题,我计算一个数字,根据这个数字我必须调用一个特定的方法。我最终想到了创建一个枚举,其中每个元素调用另一个方法。正如本文所述https://stackoverflow.com/a/4280838/2426316

然而,这个答案的海报也提到,这不会被认为是一个很好的设计,所以我想知道我应该怎么做。使用这种设计来实现算法安全吗?如果没有,我还能做什么?

Java枚举类型是对类型安全枚举模式的语言级支持(语法糖)。

类型安全枚举模式和Java枚举类型(与C#枚举等其他解决方案相比)的优点之一是,它被设计为支持方法,甚至是抽象方法。

可能用途:

  • 使用策略模式,但有一套固定策略的地方
  • 用多态性替换switch语句(首选)

更多信息:

  • 乔舒亚·布洛赫的《高效Java》。
    • 第一版包括类型安全枚举模式
    • 第二版包括Java Enum类型
  • 重构,Martin Fowler著(例如用多态性替换条件)

安全可能不是问题所在。这是罕见的,但可能很难遵循。

我的建议是以两种方式之一围绕这一点进行构建:

  1. 使用ENUM,但不要在ENUM代码本身中包含函数调用。相反,有一个函数explore(Level1 level){...},它有一个switch语句,通过传递的级别进行区分
  2. 使用Lambda表达式。这是一个更干净的解决方案,因为它允许您将函数作为参数传递;遗憾的是,在Java 8发布之前,Java本机不会支持这种方法。然而,有一些实现可以模拟Lambda表达式,最著名的可能是lambdaj

相关内容