java如何深度copy一个object?

java本身好像没有提供这个方法的吧,只有你自己重新创建一个对象,然后赋值给这个对象。iamge的复制可以用BufferedImage的方法:public WritableRaster copyData(WritableRaster outRaster)计算 BufferedImage 的一个任意矩形区域,并将其复制到指定的 WritableRaster。要计算的区域由指定 WritableRaster 的边界确定。...
java如何深度copy一个object?
java本身好像没有提供这个方法的吧,只有你自己重新创建一个对象,然后赋值给这个对象。
iamge的复制可以用BufferedImage的方法:
public WritableRaster copyData(WritableRaster outRaster)计算 BufferedImage 的一个任意矩形区域,并将其复制到指定的 WritableRaster。要计算的区域由指定 WritableRaster 的边界确定。指定 WritableRaster 必须具有与此图像兼容的 SampleModel。如果 outRaster 为 null,则创建一个合适的 WritableRaster。
不过还有一个简单的办法,就是创建一个一样大小和一样类型的BufferedImage,然后把要复制的图画上去,这两个图片就是一样的了。2009-07-29
java深复制的例子:
1、创建Employer类,实现Cloneable接口:
class Employer implements Cloneable{
private String username;

public String getUsername() {
return username;
}

public void setUsername(String username) {
this.username = username;
}

@Override
public Object clone() throws CloneNotSupportedException {
return super.clone();
}
}

2、创建Employee类,实现Cloneable接口,并改写clone方法,实现深复制:
class Employee implements Cloneable{
private String username;
private Employer employer;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public Employer getEmployer() {
return employer;
}
public void setEmployer(Employer employer) {
this.employer = employer;
}

@Override
public Object clone() throws CloneNotSupportedException {
//克隆Employee对象并手动的进一步克隆Employee对象中包含的Employer对象
Employee employee = (Employee)super.clone();
employee.setEmployer((Employer) employee.getEmployer().clone());
return employee;
}
}

3、这样,在客户端拷贝的两个Employee对象的Employer就互不影响了:
public static void main(String[] args) throws CloneNotSupportedException {
Employer employer = new Employer();
employer.setUsername("arthinking");

Employee employee = new Employee();
employee.setUsername("Jason");
employee.setEmployer(employer);

//employee2由employee深复制得到
Employee employee2 = (Employee) employee.clone();
//这样两个employee各自保存了两个employer
employee2.getEmployer().setUsername("Jason");
System.out.println(employee.getEmployer().getUsername());
System.out.println(employee2.getEmployer().getUsername());
}2015-07-11
方法一:把对象序列化之后再反序列化,之后得到的对象就是深度克隆的对象;
方法二:自己重写方法,不过有点麻烦。2009-07-29
自己重新定义克隆方法吧,2009-07-29
自己重写clone方法了!2009-07-29
mengvlog 阅读 227 次 更新于 2025-09-09 10:51:12 我来答关注问题0
  • java本身好像没有提供这个方法的吧,只有你自己重新创建一个对象,然后赋值给这个对象。iamge的复制可以用BufferedImage的方法:public WritableRaster copyData(WritableRaster outRaster)计算 BufferedImage 的一个任意矩形区域,并将其复制到指定的 WritableRaster。要计算的区域由指定 WritableRaster 的边界确定。...

  • 方法一:让包含引用的对象也实现Cloneable接口,并重写clone方法。在克隆对象时,调用包含引用对象的clone方法,以此实现深克隆。方法二:使用序列化和反序列化。通过序列化对象到流中,再反序列化到新对象,从而实现深克隆。这一过程中,成员引用也需实现Serializable接口。注意事项:克隆方法要求类实现Cloneabl...

  •  翡希信息咨询 Java的BIO、NIO和AIO的深度解析

    1. BIO(Blocking I/O)定义:BIO即阻塞I/O,是指应用程序在发起I/O调用后,线程会阻塞等待,直到I/O操作完成并返回结果。处理流程:当用户进程发起I/O系统调用时,内核开始准备数据。在数据准备和从内核缓冲区拷贝到用户空间缓冲区的两个阶段期间,用户调用线程选择阻塞等待数据返回。问题:如果内核数...

  •  翡希信息咨询 【Linux内核】Clone函数和Cloneable接口简要说明

    实现:要实现克隆操作,一个类必须实现Cloneable接口,并重写Object类中的clone方法。在重写clone方法时,通常需要先调用super.clone()来获取当前对象的一个浅拷贝(shallow copy),然后根据需要实现深度拷贝(deep copy)逻辑。浅拷贝与深拷贝:浅拷贝是指仅复制对象的引用而不复制对象本身。这意味着如果原...

  •  深空见闻 java深度优先算法

    从起始节点出发,沿着一条路径走到最深处,然后回溯到上一个节点,继续探索别的路径,直到所有节点都被访问过。实现方式:递归调用:在Java中,深度优先算法的实现通常依赖于递归调用。递归的方式使得代码简洁且易于理解,但需要注意递归的深度,避免栈溢出。栈数据结构:使用栈数据结构来模拟递归过程,这种...

檬味博客在线解答立即免费咨询

Java相关话题

Copyright © 2023 WWW.MENGVLOG.COM - 檬味博客
返回顶部