当前位置: 首页 > news >正文

Android 编码规范:(四)通过私有构造器强化不可实例化的能力

有一些工具类(utility class)不希望被实例化,实例对它没有任何意义。然而,在缺少显式构造器的情况下,编译器会自动提供一个公有的、无参的缺省构造器(default constructor),对于用户而言,这个构造器与其他的构造器没有任何区别。在已发行的API中常常可以看到一些被无意识实例化的类。

企图通过将类做成抽象类来强制该类不可被实例化,这是行不通的。该类可以被子类化,并且该子类也可以被实例化。这样做甚至会误导用户,以为这种类是专门为了继承而设计的。然后,有一些简单的习惯用法可以确保类不可被实例化。我们只要让这个类包含私有构造器,它就不能被实例化了:

[java] view plain copy
  1. // Noninstantiable utility class  
  2. public class UtilityClass {  
  3.     // Suppress default constructor for noninstantiability  
  4.     private UtilityClass() {  
  5.         throw new AssertionError();  
  6.     }  
  7. }  
由于显式的构造器是私有的,所以不可以在该类的外部访问它。这种习惯做法也有副作用,它使得一个类不能被子类化。所有的构造器都必须显式地或隐式地调用超类(superclass)构造器,在这种情形下,子类就没有可访问的超类构造器可调用了。

相关文章:

  • linux命令split
  • jQuery--联动日历(一)
  • 【背景建模】基于纹理特征的背景建模
  • C#之线程、委托,强强联手操作窗体控件...
  • F1论坛快速回复工具...
  • 页面添加运行代码
  • 基于AS-path的过滤实验
  • 携手Discuz! 中国网迈进移动互联时代
  • IOS设计模式之一:单例模式
  • 软件从业人员如何激发敏捷团队?
  • hibernate.properties文件与hibernate.cfg.xml文件
  • USACO2.2 Party Lamps(lamps)
  • [php] 数据结构算法(PHP描述) 快速排序 quick sort
  • Macbook双系统多分区的解决方案
  • java好的IO示例
  • 网络传输文件的问题
  • IE9 : DOM Exception: INVALID_CHARACTER_ERR (5)
  • [nginx文档翻译系列] 控制nginx
  • 【Linux系统编程】快速查找errno错误码信息
  • C++入门教程(10):for 语句
  • Docker 1.12实践:Docker Service、Stack与分布式应用捆绑包
  • Java新版本的开发已正式进入轨道,版本号18.3
  • Python socket服务器端、客户端传送信息
  • Redis 懒删除(lazy free)简史
  • text-decoration与color属性
  • unity如何实现一个固定宽度的orthagraphic相机
  • XML已死 ?
  • yii2中session跨域名的问题
  • 从PHP迁移至Golang - 基础篇
  • 给第三方使用接口的 URL 签名实现
  • 世界上最简单的无等待算法(getAndIncrement)
  • 思维导图—你不知道的JavaScript中卷
  • 要让cordova项目适配iphoneX + ios11.4,总共要几步?三步
  • 《天龙八部3D》Unity技术方案揭秘
  • ​​​​​​​sokit v1.3抓手机应用socket数据包: Socket是传输控制层协议,WebSocket是应用层协议。
  • ​LeetCode解法汇总1276. 不浪费原料的汉堡制作方案
  • ​如何使用ArcGIS Pro制作渐变河流效果
  • # 再次尝试 连接失败_无线WiFi无法连接到网络怎么办【解决方法】
  • #、%和$符号在OGNL表达式中经常出现
  • #ifdef 的技巧用法
  • ()、[]、{}、(())、[[]]等各种括号的使用
  • (MonoGame从入门到放弃-1) MonoGame环境搭建
  • (八)光盘的挂载与解挂、挂载CentOS镜像、rpm安装软件详细学习笔记
  • (附源码)spring boot基于小程序酒店疫情系统 毕业设计 091931
  • (四)Android布局类型(线性布局LinearLayout)
  • (四)Controller接口控制器详解(三)
  • (转)Linux下编译安装log4cxx
  • .NET 6 在已知拓扑路径的情况下使用 Dijkstra,A*算法搜索最短路径
  • .NET CORE 第一节 创建基本的 asp.net core
  • .NET Core WebAPI中使用Log4net 日志级别分类并记录到数据库
  • .NET core 自定义过滤器 Filter 实现webapi RestFul 统一接口数据返回格式
  • .NET/MSBuild 中的发布路径在哪里呢?如何在扩展编译的时候修改发布路径中的文件呢?
  • .Net6支持的操作系统版本(.net8已来,你还在用.netframework4.5吗)
  • .NET精简框架的“无法找到资源程序集”异常释疑
  • .NET中的十进制浮点类型,徐汇区网站设计