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 阅读 10 次 更新于 2025-07-20 05:09:48 我来答关注问题0
  • 通过实现Clone接口重写clone方法,可以实现深度拷贝。这种方式性能同样较高,但要求所有层级的对象都需实现Clone接口,并重写clone方法,容易出现逻辑错误。序列化是一种常用的深度拷贝方式,无论是JDK的序列化还是其他自定义序列化框架,均需要实现Serializable接口,并确保项目的唯一性。序列化实现简单,但性能...

  • java本身好像没有提供这个方法的吧,只有你自己重新创建一个对象,然后赋值给这个对象。iamge的复制可以用BufferedImage的方法:public WritableRaster copyData(WritableRaster outRaster)计算 BufferedImage 的一个任意矩形区域,并将其复制到指定的 WritableRaster。要计算的区域由指定 WritableRaster 的边界确定。...

  •  翡希信息咨询 Java中几种拷贝List的方法比较

    在Java中,拷贝List的几种常见方法比较如下:直接赋值法和clone法:效果:不佳,可能导致数据不一致或引用关系错误。推荐程度:不推荐使用。BeanUtils.copyProperties:效果:在拷贝List时并未实际完成拷贝,效果不佳。推荐程度:不适用。BeanUtils.copyProperties:效果:可能存在拷贝效果不佳的问题,与Spring版本...

  •  秒杀腹黑菟 java Map深度复制问题

    * 写在这里仅仅是提醒当value是其他对象时需要做下处理,比如一个User对象,如果你直接写成 * tempMap.put(e.getKey(), e.getValue());那么肯定是没什么用的,而要写成 * tempMap.put(e.getKey(), e.getValue().clone()); */ tempMap.put(e.getKey(),...

  •  翡希信息咨询 Java内置锁:深度解析lock和trylock

    1. lock方法 特点: 阻塞式方法:当线程调用此方法获取锁时,如果锁已被其他线程占用,当前线程将进入等待状态,直到锁被释放。 确保独占访问:确保在同一时间只有一个线程可以访问受保护的资源或代码块,从而避免并发问题。 适用场景: 适用于需要确保严格顺序访问资源的场景。 适用于对资源...

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

Java相关话题

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