2016-12-07 40 views
0

一次又一次我有一种情况,我有一个只包含静态方法的工具类。只有静态方法的类 - 枚举与否


的问题是不是具有这样的类themselfes的事实,所以不是一个关于工具类的争论。我们假设有一个用例,这个类是有意义的。


现在,我已经看到了不同的可能性,以防止实例化/扩展:

  • 私有构造和最后一类
  • 使用类的枚举,而不是

是什么这里最好的做法是?你能否详细说明两种可能性的好处/缺点?


个人而言,我更喜欢枚举的解决方案,因为它完全阻止实例化和扩展的开箱,但也许我错了。

谢谢!

+3

为什么从未实例化或扩展该类是如此重要?如果无法预防会发生什么? IMO这样的类在语义上不是枚举,并且在这里滥用枚举的非实例化并没有真正的好处。 –

+0

实例化应该被阻止,因为它只包含静态方法。所以这样做没有任何意义,并且可能会浪费资源,在某个地方引用它。至少这就是我直觉上认为,如果我有一个实际上不需要成为实例的类,那是因为只包含静态方法。 – JDC

+0

我同意,它不需要一个实例,但如果有人设法实例化它,我看不到任何悲剧发生。通过将默认构造函数设为私有,您已经确保没有人会意外实例化它 - 它需要集中精力绕过它并创建一个实例。只有在获得优势时才能取得成功(例如违反安全)。 –

回答

4

我更喜欢前者。

首先,使用具有私有构造函数的最终类是我在编写实用程序类时所做的所有事情。我甚至从来没有想过使用枚举。

的主要原因是不使用枚举是,你可以在技术上还写这样的事:

MyEnum var = MyEnum.valueOf("Hello"); 

和编译器不会说关于它的事情,甚至没有IntelliJ IDEA的!

+0

是的,你可以使用'MyEnum.values()'获得一个空数组。这些是从最初的目的分散注意力的功能。 – Holger