java 板


LINE

※ 引述《eliang ()》之铭言: : 标题: [问题] Cloneable 和 Object.clone() : 时间: Thu Dec 23 23:33:57 2010 : : 官方文件对 Cloneable 这样说明: : : Invoking Object's clone method on an instance that does not implement : the Cloneable interface results in the exception CloneNotSupportedException : being thrown. : : 引用来源: : http://download.java.net/jdk7/docs/api/index.html?java/lang/Cloneable.html : : 意思应该是若某个类别宣告後面没有 "implements Cloneable" 的字样, : : 去呼叫该类物件的 clone() 就会产生 CloneNotSupportedException 例外, : : 但我做了个实验: : : class Foo // 没接 implements Cloneable : { : public int member; : : public Foo(int m) : { : member = m; : } : : @Override // 但有覆写 Object.clone() : public Foo clone() : { : return new Foo(member); : } : } : : public class Main : { : public static void main(String[] args) : { : Foo f1 = new Foo(123); : Foo f2 = f1.clone(); : System.out.println(f2.member); : } : } : : 结果可正常执行, 没产生例外, 跟官方文件说的不一样, : : 所以结论是 Cloneable 只是个标注而已? : : 标注给人看, 让人知道那个类别可复制的而已? : : -- :



※ 发信站: 批踢踢实业坊(ptt.cc)
: ◆ From: 114.45.171.69 : 推 maokejackson:你去看Object.clone(),里面应该有throw Exception 12/24 01:30 : → sbrhsieh:第一句话就没做到了:Invoking Object's clone method 12/24 09:17 : : 所以我的结论是对的? : : 要建立一个可复制的类别, 只需覆写 Object.clone() 就好了, : : 不需 implements Cloneable, : : 所以 Cloneable 除了可以让人清楚知道某类别可否复制之外, : : 就没有其他功能? : ※ 编辑: eliang 来自: 219.87.16.194 (12/24 10:58) : → H45:请注意 Object 的成员定义: protected Object clone() ... 12/24 11:21 : → H45:简言之还是二楼所说的那样,你的程式没写对。 12/24 11:24 如果就一般应用而言,Foo class override clone method 的做法没有错,但是 以目前这样的写法而言,是无法验证 API doc 所描述的行为是否有符合 Object:: clone method 的实作,因为整个程式执行过程没有执行到 Object::clone method。 引用到的 API doc 第一段中,Invoking Object's method ... 是在说明 Object class 所实作的 clone method 的行为(specification)。 若是 Invoking object's method ... 则是用来表达所有 object 在实作 clone method 时应有的行为(可以算是 convention)。 通常会 override clone method 较多是因为 Object class 提供的 clone implementation 是 shallow copy,而你需要 deep copy。或是为了某种 aspect 上的需求,例如 tracing 每一个 instance 而 hooking clone method。 (光 hooking constructor 是不足够的,物件的产生不见得会执行到 constructor) --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 118.166.249.162
1F:推 eliang:我了解了 谢谢 12/24 21:47







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Soft_Job站内搜寻

TOP