使用Java枚举调用其他方法是不是很糟糕?

使用Java枚举调用其他方法是不是很糟糕?,java,algorithm,enums,Java,Algorithm,Enums,我有一个问题,我计算一个数字,根据这个数字,我必须调用一个特定的方法。我最终想到了创建一个枚举,其中每个元素调用另一个方法。正如这篇文章所描述的 然而,该答案的海报也提到,这将不是一个很好的设计,所以我想知道我应该怎么做。实现使用这种设计的算法安全吗?如果没有,我还能做什么?嗯,安全可能不是这里的问题。这是罕见的,但可能很难遵循 我的建议是以以下两种方式之一为基础: 使用枚举,但不要在枚举代码本身中包含函数调用。而是有一个函数explore(Level1-level){…},该函数有一个swit

我有一个问题,我计算一个数字,根据这个数字,我必须调用一个特定的方法。我最终想到了创建一个枚举,其中每个元素调用另一个方法。正如这篇文章所描述的


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

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

我的建议是以以下两种方式之一为基础:

  • 使用枚举,但不要在枚举代码本身中包含函数调用。而是有一个函数
    explore(Level1-level){…}
    ,该函数有一个switch语句,它根据传递的级别进行区分
  • 使用Lambda表达式。这是一个更干净的解决方案,因为它允许您将函数作为参数传递;遗憾的是,在Java8发布之前,Java不会在本地支持这种方法。但是,有一些实现可以模拟Lambda表达式,最著名的可能是

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

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

    可能的用途:

    • 您将使用策略模式但有一组固定策略的地方
    • 用多态性替换开关语句(首选)
    有关更多信息:

    • 约书亚·布洛赫的《有效的Java》。
      • 第一版包括类型安全枚举模式
      • 第二版包括Java枚举类型
    • 重构,由Martin Fowler(例如)

    号码是几级?还是原始数据类型?这种设计可能是好的,也可能是坏的,这取决于您试图做什么以及如何做。枚举并不适合表示数字,除非它是一组相当小的已知整数。最好使用
    Runnable
    数组。也许你可以更详细地描述你想做什么。示例代码(或伪代码)会有所帮助。为什么You不做链接问题的第一个答案,这是最好的答案谢谢,那么,您认为使用一个包含switch语句的方法是
    ok
    ,而switch语句本身包含许多调用其他方法的情况吗?在什么理论下,switch语句比让
    enum
    类声明每个
    enum
    常量需要实现的抽象方法更好?好的,但这并不漂亮。不过我还是推荐lambda函数@TedHopp:枚举通常用于枚举内容;是的,它们支持函数,但是使用这些函数会使读取代码变得非常困难。正如我上面所说,使用lambda函数将是一个更干净的解决方案。@blalasaadri因为你说lambda函数还不受支持,你认为有可能让它们在Android环境下工作吗?我从未尝试过在Android下使用lambdaj库,但是从我所读到的内容来看,这应该是可能的。那么,实现一个调用其他方法的枚举是否安全呢。我有点困惑,因为另一张海报和我的问题链接中的一张没有向我推荐这种方法。是的,通常这是一种很好的做法。当然,并不是在所有情况下,正如其他人已经提出的那样,不清楚如何使用枚举从数字映射到方法,除非您有一小部分已知数字。这就像50个不同的(已知)数字。50个不同的方法?如果是的话,难道不可能创建一组使用数字作为参数的方法吗?