自动生成拷贝对象和set() get() 方法

1.自动生成set,get方法

pom.xml:

        <!-- 工具类 Java get set 自动生成 -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.4</version>
            <scope>provided</scope>
        </dependency>

在实体类上加上@Data注解

 

2.自动生成拷贝对象

    <properties>
        <java.version>1.8</java.version>
        <org.mapstruct.version>1.2.0.Final</org.mapstruct.version>
    </properties>
        <!-- 工具类 Java bean mappings -->
        <dependency>
            <groupId>org.mapstruct</groupId>
            <artifactId>mapstruct-jdk8</artifactId>
            <!--<version>1.2.0</version>-->
            <version>${org.mapstruct.version}</version>
        </dependency>
        <dependency>
            <groupId>org.mapstruct</groupId>
            <artifactId>mapstruct-processor</artifactId>
            <version>${org.mapstruct.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.inject</groupId>
            <artifactId>javax.inject</artifactId>
            <version>1</version>
        </dependency>

后台代码:


import com.oem.entity.Oem_prd_lot;
import org.mapstruct.Mapper;
import org.mapstruct.ReportingPolicy;
import org.mapstruct.factory.Mappers;

import java.util.List;

/**
 * Created by ghost on 2019/3/8.
 */

@Mapper(unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface FbpretboxMapper {
    FbpretboxMapper INSTANCE = Mappers.getMapper(FbpretboxMapper.class);

    LotInfo getLotInfo(Oem_prd_lot lot);
    List<LotInfo> getLotInfo(List<Oem_prd_lot> list);
}

使用方法:

LotInfo lot = FbpretboxMapper.INSTANCE.getLotInfo(oem_prd_lot);

 

### 浅拷贝与深拷贝的区别及实现方法拷贝拷贝是编程中处理对象复制的两种主要方式,其核心区别在于是否递归地复制引用类型的属性。 #### 1. 浅拷贝拷贝仅复制对象的第一层属性,对于引用类型的值,它只复制指向这些值的引用,而不会递归地复制引用所指向的对象。因此,原始对象对象会共享同一块内存中的引用类型数据。如果修改了其中一个对象的引用类型属性,另一个对象也会受到影响[^2]。 **实现方法:** - 使用扩展运算符(`...`): ```javascript const obj1 = { a: 1, b: { c: 2 } }; const obj2 = { ...obj1 }; obj2.b.c = 3; console.log(obj1.b.c); // 输出:3 ``` - 使用 `Object.assign()` 方法: ```javascript const obj1 = { a: 1, b: { c: 2 } }; const obj2 = Object.assign({}, obj1); obj2.b.c = 3; console.log(obj1.b.c); // 输出:3 ``` #### 2. 深拷贝拷贝不仅复制对象的第一层属性,还会递归地复制所有层级的属性,包括引用类型的值。因此,深拷贝生成的新对象与原对象完全独立,修改其中一个对象不会影响另一个对象[^1]。 **实现方法:** - 使用递归函数: ```javascript function deepClone(obj, hash = new WeakMap()) { if (obj === null) return obj; if (obj instanceof Date) return new Date(obj); if (obj instanceof RegExp) return new RegExp(obj); if (typeof obj !== "object") return obj; if (hash.get(obj)) return hash.get(obj); let cloneObj = Array.isArray(obj) ? [] : {}; hash.set(obj, cloneObj); for (let key in obj) { if (obj.hasOwnProperty(key)) { cloneObj[key] = deepClone(obj[key], hash); } } return cloneObj; } const obj1 = { a: 1, b: { c: 2 } }; const obj2 = deepClone(obj1); obj2.b.c = 3; console.log(obj1.b.c); // 输出:2 console.log(obj2.b.c); // 输出:3 ``` - 使用 JSON 方法(注意:不支持循环引用特殊类型如函数、`Date` 等): ```javascript const obj1 = { a: 1, b: { c: 2 } }; const obj2 = JSON.parse(JSON.stringify(obj1)); obj2.b.c = 3; console.log(obj1.b.c); // 输出:2 console.log(obj2.b.c); // 输出:3 ``` #### 区别总结 | 特性 | 浅拷贝 | 深拷贝 | |------------------|---------------------------------|---------------------------------| | **复制范围** | 只复制第一层属性 | 递归复制所有层级属性 | | **引用类型** | 共享同一块内存 | 完全独立 | | **性能** | 较快 | 较慢,尤其是复杂对象结构 | | **适用场景** | 数据结构简单或允许共享引用时 | 需要完全独立的数据副本时 | ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值