【发布时间】:2017-06-13 03:07:42
【问题描述】:
我知道最终类(不能继承类)和私有构造函数(不能创建类的实例)之间的区别。但是为什么Arrays 和Math,Java 类都有私有构造函数,而Math 是最终类而Arrays 不是?
有什么区别?不是两个实用程序类吗?
谢谢
【问题讨论】:
-
看起来
Arrays的作者只是忘记了finalize 类。它的构造函数仍然是private(并用抑制默认构造函数,确保不可实例化。)并且没有创建Arrays的实例(当然没有反射),而public的其余部分方法是static,因此它也是一个“实用程序”类。语义上Math和Arrays都是“实用程序”。与 C# 相比,Java 缺少static类,如果 Java 一开始就有这样的类而不需要finalize 一个类并放置一个private构造函数,那可能会很好。 -
好问题。我唯一的猜测是他们忘记了。 (
java.util.Objects也标记为final,构造函数为private。私有构造函数抛出AssertionError并带有消息 "No java.util.Objects instances for you!": -))
标签: java constructor private final