通过创建私有构造函数,我们可以避免从外部的任何地方实例化类.通过使类最终,没有其他类可以扩展它.为什么Util类需要私有构造函数和最终类?

解决方法

从功能的角度来看,这不是一个任务,也不是 Java复杂或运行时.但是,其编码标准被更广泛的社区所接受.甚至许多静态代码审查工具(如 checkstyle和许多其他人)都会检查这些类是否遵循此类规定.

为什么遵循这一惯例,已在其他答案中解释,甚至OP也涵盖了这一点.

我想进一步解释一下,大多数Utility类都有与对象实例无关的方法/函数.这些是聚合函数.因为它们仅依赖于返回值的参数而不依赖于实用程序类的类变量.因此,大多数这些函数/方法都是静态的.因此,Utility类理想地是具有所有静态方法的类.
因此,任何调用这些方法的程序员都不需要实例化这个类.然而,一些机器人编码器(可能没有经验或兴趣)将倾向于在调用其方法之前创建他们认为需要的对象.为避免创建对象,我们有3个选项: –

>继续教育人们不要实例化它. (没有理智的人可以继续这样做.)
>将类标记为抽象: –
现在robo-coders再次不会创建对象.然而,审查和更广泛的Java社区将争辩说,标记抽象意味着你希望有人扩展它.所以,这也不是一个好选择.
>私人建设者: –
受保护将再次允许子类创建对象.

现在,再次如果有人想为这些实用程序类添加一些功能的新方法,他不需要扩展它,他可以添加新方法,因为每个方法都是独立的,没有机会破坏其他功能.所以,不需要覆盖它.而且你也不会去见,所以需要将它子类化.最好将其标记为最终.

总之,创建实用程序类的对象没有意义.因此构造函数应该是私有的.而你永远不想覆盖它,所以最后标记它.

java – 强制实用程序类应该是final和private构造函数吗?的更多相关文章

  1. Xcode C开发,需要澄清

    我非常喜欢Xcode提供对该语言可能的成员函数的深入了解的方式,并且更喜欢相对于文本伙伴使用它,如果不是因为我今天注意到的奇怪.当strings=“Teststring”时;唯一可用的substr签名如图所示但据我所知,签名应该是什么iseeonline确实s.substr(1,2);既被理解也适用于Xcode.当我尝试方法完成时为什么不显示?

  2. xamarin.ios – 没有找到ViewController ::.ctor(System.IntPtr)的构造函数

    我有一个问题,我的Monotouch应用程序有时在收到内存警告后才会崩溃.请参见下面的堆栈跟踪.堆栈跟踪是正确的,因为指定的类缺少构造函数获取IntPtr参数.但是这是有意的,因为我在应用程序中根本不使用InterfaceBuilder.那为什么会这样呢?

  3. ios – Swift – NSURL错误

    尝试使用下面的NSURL类时出错,下面的代码实际上是试图将我从Facebook拉入的图像存储到imageView中.错误如下:不知道为什么会这样,帮忙!解决方法你正在调用的NSURL构造函数有这个签名:?表示构造函数可能不返回值,因此它被视为可选.NSData构造函数也是如此:快速解决方法是:最好的解决方案是检查(解包)这些选项,即使您确定它们包含值!

  4. 如何在Xcode中追踪“libc abi.dylib:纯虚函数!”

    我有一个多线程OSX应用程序,它使用C,Objective-C和Swift的混合.当我的应用程序关闭时,我在Xcode调试器窗口中看到了这一点:我知道这个错误通常是由对C类构造函数或析构函数中的虚函数的调用引起的.有没有一种简单的方法可以找到它的位置?

  5. Swift实现对象归档

    Swift实现对象归档时有几个注意点要继承NSCoding,实现两个方法extension是一个分类,分类不允许有存储能力,所以协议方法不能写在分类中协议中的init(coderdecoder:NSCoder)函数会覆盖原始的构造函数,所以类中至少还要有另一个init方法如果不指定键名,会使用属性名称作为key,基本数据类型,需要指定key

  6. Swift学习小结之对象和类

  7. 【Swift初见】Swift构造过程

    构造过程是通过构造器来实现的,其实每个构造器就可以看作是一个函数,只是这个函数是为了执行初始化的。每个类都必须拥有一个指定构造器。

  8. Swift之旅四对象和类

    Swift里并不要求类必须继承任何标准的父类,所以如果需要的话可以省略掉父类。试一试加一个NamedShape的子类Circle,有radius属性,并且在初始化器中接收该参数。除了简单存储值外,属性还可以加getter和setter。注意EquilateralTriangle类的初始化器有三步不同:设置子类定义的属性值。如果不需要计算属性值但任然要在设置了新值之前或之后运行一段代码的话,就要用到willSet和didSet。后的所有东西都会被忽略,而且整个表达式的值是nil。

  9. Swift学习—对象和类

    上个版本的Shape类缺失了一个重要的东西:通过初始化器来创建一个实例。除了简单的存储属性,属性还有getter和setter方法。对于EquilateralTriangle中的初始化器做了三件事:1.设置子类声明的属性的值2.调用父类的初始化器3.改变被父类定义的属性值。如果你不需要计算属性但是又需要在设置一个新值之后,在运行之前提供一些代码,可以用willset和didset。

  10. swift的struct结构体类型介绍使用

随机推荐

  1. 基于EJB技术的商务预订系统的开发

    用EJB结构开发的应用程序是可伸缩的、事务型的、多用户安全的。总的来说,EJB是一个组件事务监控的标准服务器端的组件模型。基于EJB技术的系统结构模型EJB结构是一个服务端组件结构,是一个层次性结构,其结构模型如图1所示。图2:商务预订系统的构架EntityBean是为了现实世界的对象建造的模型,这些对象通常是数据库的一些持久记录。

  2. Java利用POI实现导入导出Excel表格

    这篇文章主要为大家详细介绍了Java利用POI实现导入导出Excel表格,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  3. Mybatis分页插件PageHelper手写实现示例

    这篇文章主要为大家介绍了Mybatis分页插件PageHelper手写实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  4. (jsp/html)网页上嵌入播放器(常用播放器代码整理)

    网页上嵌入播放器,只要在HTML上添加以上代码就OK了,下面整理了一些常用的播放器代码,总有一款适合你,感兴趣的朋友可以参考下哈,希望对你有所帮助

  5. Java 阻塞队列BlockingQueue详解

    本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景,通过实例代码介绍了Java 阻塞队列BlockingQueue的相关知识,需要的朋友可以参考下

  6. Java异常Exception详细讲解

    异常就是不正常,比如当我们身体出现了异常我们会根据身体情况选择喝开水、吃药、看病、等 异常处理方法。 java异常处理机制是我们java语言使用异常处理机制为程序提供了错误处理的能力,程序出现的错误,程序可以安全的退出,以保证程序正常的运行等

  7. Java Bean 作用域及它的几种类型介绍

    这篇文章主要介绍了Java Bean作用域及它的几种类型介绍,Spring框架作为一个管理Bean的IoC容器,那么Bean自然是Spring中的重要资源了,那Bean的作用域又是什么,接下来我们一起进入文章详细学习吧

  8. 面试突击之跨域问题的解决方案详解

    跨域问题本质是浏览器的一种保护机制,它的初衷是为了保证用户的安全,防止恶意网站窃取数据。那怎么解决这个问题呢?接下来我们一起来看

  9. Mybatis-Plus接口BaseMapper与Services使用详解

    这篇文章主要为大家介绍了Mybatis-Plus接口BaseMapper与Services使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  10. mybatis-plus雪花算法增强idworker的实现

    今天聊聊在mybatis-plus中引入分布式ID生成框架idworker,进一步增强实现生成分布式唯一ID,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

返回
顶部