android 克隆对象,克隆会破坏单例对象吗?
假设有这样一个场景,如果复制的目标对象恰好是单例对象,那会不会破坏单例对象呢?
当然,我们在已知的情况下肯定不会这么干,但如果发生了意外怎么办?不防来修改一下代码。
public class ConcretePrototype implements Cloneable {
private static ConcretePrototype instance = new ConcretePrototype();
private ConcretePrototype() {
}
public static ConcretePrototype getInstance() {
return instance;
}
@Override
public ConcretePrototype clone() {
try {
return (ConcretePrototype) super.clone();
} catch (CloneNotSupportedException e) {
return null;
}
}
}
我们把构造方法私有化,并且提供 getInstance() 方法。编写客户端测试代码如下。
public static void main(String[] args) {
//创建原型对象
ConcretePrototype protoType = ConcretePrototype.getInstance();
//复制原型对象
ConcretePrototype cloneType = protoType.clone();
System.out.println("原型对象和克隆对象比较"+(protoType==cloneType));
}
运行结果如下所示:
原型对象和克隆对象比较false
从运行结果来看,确实创建了两个不同的对象。实际上防止复制破坏单例对象的解决思路非常简单,禁止复制便可。那么我们的单例类不实现 Cloneable 接口,要么我们重写 clone() 方法,在 clone() 方法中返回单例对象即可,具体代码如下。
@Override
public ConcretePrototype clone() {
return instance;
}
android 克隆对象,克隆会破坏单例对象吗?相关推荐
- 2021年大数据常用语言Scala(二十九):scala面向对象 单例对象
目录 单例对象 定义object - 掌握 伴生对象 - 掌握 apply方法 - 掌握 main方法 单例对象 Scala中没有static关键字,但是它支持静态 如果要定义静态的东西,统统定义到o ...
- Scala单例对象(伴生对象)
概念 Scala语言是完全面向对象的语言,所以并没有静态的操作(即在Scala中没有静态的概 念).但是为了能够和Java语言交互(因为Java中有静态概念),就产生了一种特殊的对象 来模拟类对象,该 ...
- scala什么是单例对象_Scala单例和伴侣对象
scala什么是单例对象 Scala中的单例对象 (Singleton objects in Scala) Scala being an object-oriented programming lan ...
- 单例对象会被jvm的gc时回收吗_【PHP设计模式】单例模式
前言 设计模式是我们开发过程中的重中之重,所以今天小编就来学习设计模式中的单例模式. 单例模式 <?phpclass Singleton { /*** 定义一个静态变量保存已经实例化的对象* * ...
- 关于“如何破坏单例“我说了好几种方式,面试官却说:我其实随便问问,没想到你真会
单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一.是一种创建型设计模式.他的定义为:保证一个类仅有一个实例,并提供一个访问它的全局访问点. 单例模式一般体现在类声明中 ...
- 关于如何破坏单例我说了好几种方式,面试官却说:我其实随便问问,没想到你真会...
单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一.是一种创建型设计模式.他的定义为:保证一个类仅有一个实例,并提供一个访问它的全局访问点. 单例模式一般体现在类声明中 ...
- 面试官:Spring创建好的单例对象存在线程安全问题吗?
点击关注公众号,实用技术文章及时了解 来源:blog.csdn.net/jdk_wangtaida/ article/details/88738228 前言 这是我在一次面试中被问到过的问题,但是当时 ...
- Kotlin入门(18)利用单例对象获取时间
前面介绍了,使用扩展函数可以很方便地扩充数组Array的处理功能,例如交换两个数组元素.求数组的最大元素等等.那么除了数组之外,日期和时间的相关操作,也是很常见的,比如获取当前日期,获取当前时间.获取 ...
- 【scala】类的定义和单例对象
一.类的定义 Scala类的定义跟JAVA中类的定义基本是一样的. 示例 class ChecksumAccumulator{var sum = 0;//Scala默认关键字为publicprivat ...
最新文章
- DllMain中不当操作导致死锁问题的分析--加载卸载DLL与DllMain死锁的关系
- celery的初次使用
- LVS负载均衡的简单实现
- .net framework 4.0 安装失败解决办法
- C#开发笔记之12-如何用C#统计子字符串出现的次数?
- java String类常用的方法
- 超级楼梯[HDU2041]
- 织梦缩略图自动补齐绝对路径_织梦生成文章内容缩略图时自动加上绝对路径教程...
- 5月30日任务 访问日志不记录静态文件、访问日志切割、静态元素过期时间
- 小黑T61P 挂了,显卡门,维修经历跟踪
- Eclipse搭建Android开发环境并运行Android项目 (详细)
- build lavas 失败_vue lavas的项目在IE下显示空白
- HTTP长连接和WebSocket长连接的区别
- correl函数相关系数大小意义_EXCEL中的相关系数能说明什么?
- 基于FPGA:运动目标检测(补充仿真结果,可用毕设)
- SAP MM-MB52 物料库存查询简单操作
- 惯性导航(IMU)误差分析
- 医生还未失业,IBM Watson 已跌入深渊
- JavaSSM-Mybatis框架使用
- 股市和庞氏骗局的类同之处
热门文章
- 云评测 | OpenStack智能运维解决方案 @文末有福利!
- blazeds调用java_Flex使用Blazeds与Java交互及自定义对象转换详解(转)
- ajax返回来总是html,ajax返回类型
- 自动生成考勤表_可自动变色的考勤表,逢周末自动更新,你会制作吗?
- Vue-router 的使用 (vue3.x版本)
- centos7 /etc/profile 文件模板
- 前后端敏感数据加密方案及实现_01
- 设置axios默认访问前缀
- form表单提交,后台实体类接收转义问题
- html边框大一点,CSS3 框大小(box-sizing)