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