0
点赞
收藏
分享

微信扫一扫

java 一个对象数据赋值到新建的对象中

在Java中,将一个对象的数据赋值到另一个新建对象中通常称为对象复制克隆,有以下几种常见实现方式:

1. 手动赋值(推荐)

最直接的方式是手动创建新对象,并逐个属性赋值:

public class User {
    private String name;
    private int age;

    // 构造方法、Getter和Setter省略

    // 复制方法
    public User copy() {
        User newUser = new User();
        newUser.setName(this.name);
        newUser.setAge(this.age);
        return newUser;
    }
}

// 使用示例
User original = new User("Alice", 30);
User copy = original.copy();

2. 实现Cloneable接口(浅克隆)

通过实现Cloneable接口并重写clone()方法:

public class User implements Cloneable {
    private String name;
    private int age;

    @Override
    protected User clone() throws CloneNotSupportedException {
        return (User) super.clone();
    }
}

// 使用示例
User original = new User("Bob", 25);
User copy = original.clone(); // 需要处理异常

注意

  • Cloneable是标记接口,需重写clone()方法。
  • 浅克隆:仅复制对象本身,引用类型字段仍指向原对象。
  • 深克隆:需手动递归复制所有引用类型字段。

3. 构造函数复制

在目标类中添加带参构造函数:

public class User {
    private String name;
    private int age;

    // 复制构造函数
    public User(User other) {
        this.name = other.name;
        this.age = other.age;
    }
}

// 使用示例
User original = new User("Charlie", 35);
User copy = new User(original);

4. 使用BeanUtils(Apache Commons)

通过工具类自动复制属性:

import org.apache.commons.beanutils.BeanUtils;

User original = new User("David", 40);
User copy = new User();
BeanUtils.copyProperties(copy, original);

依赖

<dependency>
    <groupId>commons-beanutils</groupId>
    <artifactId>commons-beanutils</artifactId>
    <version>1.9.4</version>
</dependency>

5. 使用ModelMapper(推荐)

更灵活的对象映射工具:

import org.modelmapper.ModelMapper;

User original = new User("Eve", 28);
ModelMapper modelMapper = new ModelMapper();
User copy = modelMapper.map(original, User.class);

依赖

<dependency>
    <groupId>org.modelmapper</groupId>
    <artifactId>modelmapper</artifactId>
    <version>3.1.0</version>
</dependency>

选择建议

  1. 简单对象:手动赋值或构造函数复制。
  2. 复杂对象:使用ModelMapper或BeanUtils。
  3. 需要深克隆:手动实现或结合序列化(如JSON)。

示例(手动深克隆)

public class Address {
    private String city;
    // getter/setter
}

public class User {
    private String name;
    private Address address;

    public User copy() {
        User newUser = new User();
        newUser.setName(this.name);
        
        // 深克隆:手动复制引用类型
        Address newAddress = new Address();
        newAddress.setCity(this.address.getCity());
        newUser.setAddress(newAddress);
        
        return newUser;
    }
}

举报

相关推荐

0 条评论