public class Collections {
// Suppresses default constructor, ensuring non-instantiability.
private Collections() {
}
...
所有包含的方法都是静态的,如果我编写类似的代码,我会将 Collections.class 设为抽象,但仍然有一个私有构造函数 - 为什么该类未定义为抽象?
public class Collections {
// Suppresses default constructor, ensuring non-instantiability.
private Collections() {
}
...
所有包含的方法都是静态的,如果我编写类似的代码,我会将 Collections.class 设为抽象,但仍然有一个私有构造函数 - 为什么该类未定义为抽象?
一个类abstract
意味着它可以(并且打算)被扩展,而Collections
类不是这种情况。这是我的猜测。
该类Collections
并不意味着扩展或子类化——它只是作为静态实用程序方法的提供者。如果它是抽象的,用户可以将其子类化,而 JDK 设计者不希望这样。
你可以做到
abstract
班级enum
没有实例的final
堂课恕我直言,这取决于第一次编写课程时的风格,因为以后有一点理由改变它。
除了它的“技术”方面(即无法实例化)之外,abstract
还有一个面向库用户的语义方面:它传达了其他人扩展类的意图。这不是你应该做的事情Collections
,因此标记它abstract
是一个错误。
这是一种常见的做法,用于只有静态方法的实用程序类。使类抽象没有意义,因为没有定义实例方法。这是为了防止有人在不需要的地方创建实例。
List<String> myList = Arrays.asList("b", "c", "a");
new Collections().sort(myList);
在哪里
List<String> myList = Arrays.asList("b", "c", "a");
Collections.sort(myList);
是使用实用程序类的“正确”方式。