在我的代码库中,我找到了这样一个类:
punctuations
我的IDE(IntelliJ IDEA)为这个类提供了一个“改进” - 将其改为枚举。作为测试,我进行了更改,并注意到没有对任何成员字段或方法执行任何其他重构,也没有注意对所包含的静态方法的任何调用。
这是生成的枚举:
public final class Klass
{
private static final long LONG_NUMBER = 10.0;
private Klass() {}
public static double calcSomethingUsingLongNumberAndParam(double param)
{
...
return something;
}
}
将最终类更改为枚举是否有好处,或者这是IDE的怪癖?
答案 0 :(得分:0)
我的回答最初说肯定有好处,枚举几乎在所有方面都取代旧式POJO单身人士(这是一个特例)。但是,它取决于用例和涉及的实际代码。如果你只是替换"最后的课程"使用" enum",就像IDE似乎在这种情况下所做的那样,好处很小。此外,使用枚举的主要好处之一是更好的类型检查有限值,但由于您似乎只使用单个数值而且它是私有的,因此它没有任何好处。
使用枚举与常量实用程序类的优点:
缺点:
所以,如果这个类是作为外部库提供的接口的一部分,我们可以非常自信没有人会改变它自己的实现,它实际上比在这里使用枚举更安全。但是,如果维护此代码(特别是由不同的开发人员) - 并且任何代码应该是,我会认为枚举有更多的优点提供,因为它更清楚地传达其意图。即使是我唯一可以想到的,从子类化中删除保护,看起来也很微不足道,因为在定义的类之外,枚举实际上是最终的。
有关枚举益处的更多讨论,请参阅What are enums and why are they useful?。还有另一个关于在诸如你的常量实用程序类中使用final关键字的好处的讨论:Final Keyword in Constant utility class - 我从讨论中得出的结论是,唯一的好处是明确禁止将其子类化,因为你无法覆盖静态的东西,所以无论如何都不会工作。
TLDR;建议用枚举替换似乎是合理的,至少如果你省略了你不必用枚举明确声明的东西。但是,差异与可读性和可维护性有关,而与行为没有任何差异。
答案 1 :(得分:0)
将此类更改为枚举没有任何直接的好处。
它唯一能给你的是省略私有构造函数(以及类上的final
)。
但是您还需要一个单独的值(您不需要),或者只是随机挂起;
以将(空)值列表与其余的值分开上课。