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

时间:2013-08-12 15:18:19

标签: java algorithm enums

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

中所述

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

2 个答案:

答案 0 :(得分:2)

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

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

可能的用法:

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

了解更多信息:

  • 有效的Java,由Joshua Bloch撰写。
    • 第一版包含类型安全的枚举模式
    • 第二版包括Java Enum类型
  • 重构,作者:Martin Fowler(例如Replace conditional with polymorphism

答案 1 :(得分:-3)

嗯,安全可能不是这里的问题。虽然很难遵循,但这种情况并不常见。

我的建议是以两种方式之一构建:

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