它是否强制效用类应该是最终的私有构造函数?
2022-09-03 05:45:16
通过创建私有构造函数,我们可以避免从外部的任何位置实例化类。并且通过使类成为最终类,没有其他类可以扩展它。为什么 Util 类必须具有构造函数和类?private
final
通过创建私有构造函数,我们可以避免从外部的任何位置实例化类。并且通过使类成为最终类,没有其他类可以扩展它。为什么 Util 类必须具有构造函数和类?private
final
从功能或java复杂性或运行时的角度来看,这不是一个命令。然而,它的编码标准被更广泛的社区所接受。甚至许多静态代码审查工具(如checkstyle和许多其他工具)也会检查这些类是否遵循了这种规范。
为什么遵循这个约定,已经在其他答案中解释过了,甚至OP也涵盖了这一点。
我喜欢进一步解释它,大多数效用类都有独立于对象实例的方法/函数。这些是聚合函数。因为它们仅依赖于返回值的参数,而不与实用程序类的类变量相关联。因此,大多数情况下,这些函数/方法都是静态的。因此,理想情况下,实用工具类是具有所有静态方法的类。因此,任何调用这些方法的程序员都不需要实例化此类。但是,一些机器人编码人员(可能经验或兴趣较少)倾向于在调用其方法之前创建他们认为需要的对象。为了避免创建对象,我们有3个选项:-
现在,如果有人想为这些实用程序类添加某些功能的新方法,他不需要扩展它,他可以添加新方法,因为每个方法都是独立的,并且没有机会破坏其他功能。因此,无需覆盖它。而且你也不会插入,所以需要对它进行子类化。最好将其标记为最终版本。
总而言之,创建效用类的对象是没有意义的。因此,构造函数应该是私有的。而且你永远不想覆盖它,所以把它标记为最终。
这不是必需的,但很方便。实用工具类只是相关函数的命名空间持有者,并不意味着要实例化或子类化。因此,阻止实例化和扩展会向类的用户发送正确的消息。