对象的拷贝

如果要拷贝一个对象,确保要做到以下两件事:

I.确保拷贝后的对象,与原对象具有相同的prototype原型对象

II.确保拷贝后的对象,与原对象具有相同的属性

function copyObject(orig){
        //具有相同的原型
	 var copy = Object.create(Object.getPrototypeOf(orig));
        //具有相同的属性
	 copyOwnPropertyFrom(copy,orig);
	 return copy;
}
        
        //属性copy
function copyOwnPropertiesFrom(target,source){
	Object
	    .getOwnPropertyNames(source)
	    .forEach(function(propKey){
			var desc = Object.getOwnPropertyDescriptor(source,propKey)
			Object.defineProperty(target,propKey,desc);
		});
}

1.获取所有source自身属性的数组,

2.遍历这些键,

3.获取属性描述符,

4.使用属性描述符创建target的自身属性。



### Hutool框架中的对象拷贝 在Hutool框架中,`BeanUtil.copyProperties` 方法被广泛应用于对象之间的属性复制。此方法可以简化开发人员的工作流程并减少样板代码的数量[^2]。 #### 使用 `copyProperties` 进行浅拷贝 对于简单的POJO类之间执行浅层次的对象拷贝,可以直接调用静态方法: ```java import cn.hutool.core.bean.BeanUtil; public class Example { public static void main(String[] args) { SourceObject source = new SourceObject(); TargetObject target = new TargetObject(); BeanUtil.copyProperties(source, target); System.out.println(target.toString()); } } ``` 上述代码展示了如何利用`BeanUtil.copyProperties()`函数将源对象的数据成员赋值给目标对象。需要注意的是,默认情况下这只是一个浅层的复制过程,意味着如果存在嵌套对象,则不会创建新的实例而是共享相同的引用。 #### 实现深拷贝 为了完成深层次的对象克隆(即递归地复制所有子对象),可以在调用时传递额外参数以指示需要深度复制: ```java import cn.hutool.core.bean.BeanUtil; // 假设SourceClass 和 TargetClass 都实现了Serializable接口 TargetClass deepCopyInstance = (TargetClass) BeanUtil.toBean(SourceClass.class.newInstance(), TargetClass.class, true, null); ``` 这里通过设置第三个布尔型参数为true来开启深度复制模式;最后一个null参数代表不需要自定义转换器的情况。当涉及到复杂数据结构或有特殊需求时,还可以传入具体的TypeConverter来进行定制化处理。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值