《Effective Java 3rd Edition》关于clone()的问题

花落的速度 2018-07-24 05:58:23
关于这一段,到底想表达什么啊,我看了好久也没看懂什么意思
参见《Effective Java 3rd Edition》item13:Override clone judiciously

(这东西复制字数有上限,所以截了个图)
各种翻译也用了不少,但仍然感觉怪怪的。
1.说它类似链式调用是因为它递归地调用父类的clone()方法吗?
2.蓝色第四行,为什么会返回错误的类,这里的错误是指什么?
3.蓝色最后一行,到底想表达什么啊,不依赖Object的clone然后呢?会导致什么?
先谢过大佬们不吝赐教,100分送上
...全文
249 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
花落的速度 2018-07-26
  • 打赏
  • 举报
回复
引用 3 楼 stacksoverflow 的回复:
1.说它类似链式调用是因为它递归地调用父类的clone()方法吗?
回答:构造函数是链式调用的,并且是强制执行的,也就是构造子类的前提必须是先构造父类。
clone()方法原则上也是需要链式调用的,也就是必须调用父类的clone()方法,但是,没有强制执行。

2.蓝色第四行,为什么会返回错误的类,这里的错误是指什么?
回答:返回错误的类可以参考这个例子:

class Sheep implements Cloneable {

Sheep(String name)...

public Object clone() {
return new Sheep(this.name); // bad, doesn't cascade up to Object
}
}

class WoolySheep extends Sheep {

public Object clone() {
return super.clone();
}
}

如果做如下操作的话,就会出错,因为dolly.clone()方法返回了Sheep类型的实例并没有返回WoolySheep类型的实例。

WoolySheep dolly = new WoolySheep("Dolly");
WoolySheep clone = (WoolySheep)(dolly.clone()); // error


以上代码引用自:
https://stackoverflow.com/questions/11654176/effective-java-clonable-interface

3.蓝色最后一行,到底想表达什么啊,不依赖Object的clone然后呢?会导致什么?
回答:Object的clone方法在执行时,如果该类没有实现Cloneable接口则会报错,也就是你如果不调用Object的clone方法,那么就是一个普通的方法,也就没有必要实现Cloneable接口。

感谢!看完之后思路清晰多了
stacksoverflow 2018-07-25
  • 打赏
  • 举报
回复
1.说它类似链式调用是因为它递归地调用父类的clone()方法吗?
回答:构造函数是链式调用的,并且是强制执行的,也就是构造子类的前提必须是先构造父类。
clone()方法原则上也是需要链式调用的,也就是必须调用父类的clone()方法,但是,没有强制执行。

2.蓝色第四行,为什么会返回错误的类,这里的错误是指什么?
回答:返回错误的类可以参考这个例子:

class Sheep implements Cloneable {

Sheep(String name)...

public Object clone() {
return new Sheep(this.name); // bad, doesn't cascade up to Object
}
}

class WoolySheep extends Sheep {

public Object clone() {
return super.clone();
}
}

如果做如下操作的话,就会出错,因为dolly.clone()方法返回了Sheep类型的实例并没有返回WoolySheep类型的实例。

WoolySheep dolly = new WoolySheep("Dolly");
WoolySheep clone = (WoolySheep)(dolly.clone()); // error


以上代码引用自:
https://stackoverflow.com/questions/11654176/effective-java-clonable-interface

3.蓝色最后一行,到底想表达什么啊,不依赖Object的clone然后呢?会导致什么?
回答:Object的clone方法在执行时,如果该类没有实现Cloneable接口则会报错,也就是你如果不调用Object的clone方法,那么就是一个普通的方法,也就没有必要实现Cloneable接口。
花落的速度 2018-07-25
  • 打赏
  • 举报
回复
引用 1 楼 verejava 的回复:
Java 设计模式 之 克隆模式

http://www.verejava.com/?id=16999064613464

我知深浅克隆什么概念,但是仍然看不明白这一段。为甚么会跟构造方法constructor搅在一起?会发生什么错误?头大
verejava 2018-07-25
  • 打赏
  • 举报
回复
Java 设计模式 之 克隆模式

http://www.verejava.com/?id=16999064613464

51,409

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧