我有一个很简单的问题:
我想要一个Java类,该类提供一个公共静态方法,该方法可以执行某些操作。这只是出于封装目的(将所有重要的内容都放在一个单独的类中)…
此类不应被实例化或扩展。那让我写道:
final abstract class MyClass { static void myMethod() { ... } ... // More private methods and fields... }
(尽管我知道,这是禁止的)。
我也知道,我可以使此类完全为final,并在将其私有化时覆盖标准构造函数。
但这在我看来更像是一种“解决方法”,应该更可能由最终的抽象类完成…
而且我讨厌解决方法。因此,仅出于我自己的利益:还有另一种更好的方法吗?
参考:有效的Java 2nd Edition,第4项“使用私有构造函数强制执行非示例性”
public final class MyClass { //final not required but clearly states intention //private default constructor ==> can't be instantiated //side effect: class is final because it can't be subclassed: //super() can't be called from subclasses private MyClass() { throw new AssertionError() } //... public static void doSomething() {} }