`
snowfox2008
  • 浏览: 127431 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

关于clone的问题

阅读更多
偶今天真是郁闷呀,在系统中用了一个静态的hashtable缓存工作流定义(因为在运行期,工作流定
义是不可能改变的),但是偶忘了在调用客户端的JAVABEAN时,业务系统给JAVABEAN的参数重新赋了值,
结果..........,偶都不好意思说了,所有的实例都取了第一次的赋值。于是乎,偶赶紧给JAVABEAN对象
实现了Cloneable,然后在给参数重新赋值的地方,用clone的对象,嘿嘿,应该没问题了吧,重新测
试.........,偶呆了,第二次赋值竟然还是取的缓存的值,MY GOD!难道是偶见鬼了?再仔细瞅瞅,哦
,原来是,javabean对象虽然用了clone后的,但是它的成员对象ParameterInfo还保留着原来的引用,即
内存里虽然是有了两个javabean对象,但是这两个对象都用的是对一个ParameterInfo对象的引用,偶赶
紧去查clone...........唉,偶真是汗颜呀,其实就是一个影子clone和深度clone的问题。原来偶用的竟
是影子clone!
    以下引自《java中传值和传址及其引伸深度克隆的思考》
    “java中的所有对象都是Object类的子类,Object类定义了protected clone()方法,它的作用和c++
中按位复制是一样的,因此同样会带来如果对象中包含另一个对象(注意是对象不是基本数据类型,基本
数据类型直接就会被复制)的指针(java中的句柄),clone并没有将被包含的对象clone,而是复制了被
包含对象的句柄或者说指针。因此并不能认为复制出来的对象就可以随心所欲的修改,因为它和被clone
的对象都包含同一个对象,因此可能会引起潜在的冲突问题。至于深度clone的方法很简单,就是在子类
中覆盖父类Object类中clone方法,保证每一个被包含的对象都被按照位被clone。如果包含的数据全部是
基本类型数据,那么就什么也不用做了。深度clone还有另一种方法就是利用Serializable,但是对象中被
transient关键字修饰的变量是不会被序列化的. 因为clone用到的地方并不多,就不多说了。但是当你遇
到的时候,一定要小心。”
- 作者: snowfox2008 2004年07月21日, 星期三 18:59
 
分享到:
评论

相关推荐

    java clone

    下面是一些关于`clone`的实践心得: 1. 注意权限:默认情况下,`clone`方法是`protected`的,这意味着在同一个包内的类才能直接调用。如果需要在不同包的类中使用`clone`,需要将它声明为`public`。 2. 避免空指针...

    关于JLINK固件丢失或升级固件后提示Clone的解决办法

    解决 JLINK 固件丢失或升级固件后提示 Clone 的问题 在使用 JLINK 仿真器进行单片机开发时,可能会遇到固件丢失或升级固件后提示 Clone 的问题,本文将提供解决该问题的步骤。 问题描述 使用 JLINK 仿真器时,...

    jlink v9 warning clone解决

    标题中的"jlink v9 warning clone解决"意味着开发者正在尝试解决关于JLink v9版本出现的克隆警告。这个警告可能是因为使用了非官方的或者未授权的JLink设备,或者是由于驱动程序或固件版本不兼容导致的。在MDK环境下...

    修改过地址的J-link_v8.bin,完美解决上电clone问题

    已经修改过固件的偏移地址,上电后 mdk会升级,正常现象,让他升级好了,不会有问题,升级完就可以正常使用了. 具体原因如下:由于固件的原因,Jlink一插上电脑就提示Jlink是clone,后来发现J-link_v8.bin这个固件还需要...

    Jlink-clone解决办法,替换文件.rar

    当遇到"Jlink-clone"问题时,这通常指的是遇到了非原厂生产的、可能功能受限或者不稳定版本的J-Link设备。这类克隆设备可能会有兼容性问题、性能下降或不支持某些高级功能。本文将深入探讨如何解决Jlink-clone带来的...

    java Clone

    Java中的`clone`方法是Java语言提供的一种复制对象的方式,它允许创建一个对象的副本,这个副本与原对象具有相同的属性值,但它们是两个独立的对象,修改副本不会影响原对象。`clone`方法存在于Java的`java.lang....

    java_clone用法

    例如,如果`User`类中的`name`和`age`属性均被定义为不可变的,那么即使进行浅拷贝也不会出现问题。 #### 八、总结 在Java中,`clone`方法为我们提供了一个快速复制对象的方式。通过理解和掌握浅拷贝与深拷贝的概念...

    clone()示例源码

    在标签"java clone()"中,我们可以推断这篇博客可能还讨论了关于Java中对象复制的各种策略,如序列化和反序列化,以及`CopyConstructor`,这些都是创建对象副本的替代方法,特别是当`clone()`不能满足特定需求时。...

    java clone的小例子

    在Java编程语言中,`clone()`方法是一个非常重要的概念,特别是在对象复制和克隆方面。这个小例子将帮助初学者...在实际编程中,理解`clone()`的工作原理和限制是非常重要的,这可以帮助避免潜在的问题并提高代码质量。

    git代码clone,submodule

    以上就是关于 `git clone` 和 `git submodule` 命令以及如何使用它们来管理和维护项目中的子模块的详细介绍。这些命令对于处理大型项目或包含多个子项目的项目非常重要。熟练掌握这些命令可以帮助你更高效地管理工作...

    CLONE 10-ex

    标题“CLONE 10-ex”以及描述“Clone10-EX-LV2”暗示了我们正在处理一个可能与克隆或复制技术相关的项目,可能是软件、系统镜像或者某种形式的数据备份工具。"Clone"通常指的是在计算机科学中创建一个与原始对象完全...

    git clone 最新版

    对于Windows用户,可以下载类似`Git-2.29.2.2-64-bit.exe`这样的安装程序,这是一个特定版本的Git二进制文件,包含最新功能和修复的安全问题。 Git的版本号由三部分组成:主版本号、次版本号和修订号(如2.29.2)。...

    彻底解决Mac端git clone/push速度太慢的问题

    彻底解决Mac端git clone/push速度太慢的问题,详情请参阅文档。

    Clone详解.doc

    Java中的克隆(Clone)机制是一种创建对象副本的方法,它允许程序员复制一个对象的状态,而不会影响原始对象。克隆在编程中常用于创建对象的独立副本,使得新副本与原对象之间相互独立,对其中一个对象的修改不会...

    windows git 批量 clone 脚本

    本文将深入探讨如何利用批处理脚本来实现这一目标,主要关注标题提及的"windows git 批量 clone 脚本"。我们将讨论每个文件的作用,并提供相关知识点。 首先,`clone-all.bat`是用于批量克隆Git仓库的脚本。在Git中...

    比nero更完美的刻录CD软件---CLONE_CD

    CLONE_CD是一款专业的CD复制软件,它在刻录领域中被誉为比Nero更为出色的选择,尤其是在数据保护和精确复制方面。这款软件的核心功能是提供无损的CD映像克隆,确保源盘与目标盘的一致性,尤其适用于备份音乐CD、游戏...

    关于java clone的一些基本的概念

    在实际开发中,使用`clone`可能会遇到一些问题,比如权限问题、类型安全问题等。因此,有时候会使用`copy-constructor`(拷贝构造函数)或`Builder`模式来替代`clone`,它们可以提供更清晰的代码结构和更可控的复制...

    MinesweeperClone汉化版

    Minesweeper CLone 0.97 Saolei.net扫雷网,小门汉化 Men Shiyun Mine.exe 请自行下载MinesweeperClone_0.97.exe安装后使用

Global site tag (gtag.js) - Google Analytics