一尘不染

Java最终抽象类

java

我有一个很简单的问题:

我想要一个Java类,该类提供一个公共静态方法,该方法可以执行某些操作。这只是出于封装目的(将所有重要的内容都放在一个单独的类中)…

此类不应被实例化或扩展。那让我写道:

final abstract class MyClass {
   static void myMethod() {
      ...
   }
   ... // More private methods and fields...
}

(尽管我知道,这是禁止的)。

我也知道,我可以使此类完全为final,并在将其私有化时覆盖标准构造函数。

但这在我看来更像是一种“解决方法”,应该更可能由最终的抽象类完成…

而且我讨厌解决方法。因此,仅出于我自己的利益:还有另一种更好的方法吗?


阅读 221

收藏
2020-12-03

共1个答案

一尘不染

参考:有效的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() {}
}
2020-12-03