首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >浅拷贝和深拷贝示例

浅拷贝和深拷贝示例
EN

Stack Overflow用户
提问于 2012-03-30 11:01:16
回答 3查看 7.7K关注 0票数 2

是否可以通过以下方式实现深拷贝和浅拷贝?是否正确?以下两个克隆方法中的任何一个都将被放入最终代码中

代码语言:javascript
运行
复制
public class Student{
  private String name;
  private DepartMent dept;


 //deep copy 
 public Object clone() throws CloneNotSupportedException{
  Student s =  (Student)super.clone();
  s.septDept((Department)dept.clone());
 }

 //shallow copy
 public Object clone() throws CloneNotSupportedException{
   return super.clone();
 }

}
EN

回答 3

Stack Overflow用户

发布于 2012-03-30 11:05:39

与其尝试实现considered broken中的Cloneable,我建议您考虑使用copy constructors。复制构造函数将自己声明类型的实例作为参数,并将该实例的字段复制到新对象。例如:

代码语言:javascript
运行
复制
public Student(Student copyFrom) {
    this.name = copyFrom.name;
    this.dept = copyFrom.dept;
}

...

Student copy = new Student(originalStudent);

如果Department还公开了一个复制构造函数,这将允许您创建Student的深层副本。例如:

代码语言:javascript
运行
复制
public Student(Student copyFrom) {
    this.name = copyFrom.name;
    this.dept = new Department(copyFrom.dept);
}

尽管从你的问题中还不清楚为什么需要一个深度拷贝。

为了进一步阅读,this article涉及到Cloneable的问题和复制构造函数的限制。

票数 7
EN

Stack Overflow用户

发布于 2012-03-30 11:15:01

您还可以使用dup()方法,该方法还会返回原始代码的副本,这取决于您试图使用copy方法实现哪种代码...你只是在征求意见,而没有给我们足够的信息来正确地指导你…在stackoverflow中也有大量有示例的回答问题,所以你应该先检查一下你的东西,然后再寻求帮助

票数 0
EN

Stack Overflow用户

发布于 2014-02-27 21:29:29

根据我的理解,只有一件事是正确的,那就是覆盖DepartMent类中的clone()方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9936454

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档