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