Collection类有一个私有构造函数,为什么不把它作为抽象?

时间:2012-04-17 16:19:30

标签: java collections

public class Collections {
    // Suppresses default constructor, ensuring non-instantiability.
    private Collections() {
    }
...

所有包含的方法都是静态的,如果我编写类似的东西,我会创建Collections.class抽象,但仍然有一个私有构造函数 - 为什么类没有被定义为抽象?

5 个答案:

答案 0 :(得分:8)

一个类abstract意味着它可以(并且意图)被扩展,而Collections类不是这种情况。这是我的猜测。

答案 1 :(得分:5)

Collections类不是要扩展或子类 - 它只是一个静态实用程序方法的提供者。如果它是抽象的,用户可以将其子类化,而JDK设计者不希望这样。

答案 2 :(得分:4)

你可以成功

  • abstract
  • 或没有实例的enum
  • final
恕我直言,这取决于班级写作时的风味,因为稍后会有更改的原因。

答案 3 :(得分:2)

除了“技术”方面(即无法实例化)之外,abstract还有一个面向库用户的语义方面:它为其他人传达意图以扩展类。这不是您应该对Collections执行的操作,因此将abstract标记为错误。

答案 4 :(得分:1)

这是一种常见的做法,在只有静态方法的实用程序类中使用。使类抽象是没有意义的,因为没有定义实例方法。这是为了防止某人创建一个不需要它的实例。

List<String> myList = Arrays.asList("b", "c", "a");
new Collections().sort(myList);

,其中

List<String> myList = Arrays.asList("b", "c", "a");
Collections.sort(myList); 

是使用实用程序类的“正确”方法。