public class Collections {
// Suppresses default constructor, ensuring non-instantiability.
private Collections() {
}
...
所有包含的方法都是静态的,如果我编写类似的东西,我会创建Collections.class抽象,但仍然有一个私有构造函数 - 为什么类没有被定义为抽象?
答案 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);
是使用实用程序类的“正确”方法。