不正确的 clone() 方法实现与修复方案

在 Java 中,clone() 方法用于创建对象的副本,但浅拷贝(Shallow Copy) 是常见错误,尤其当对象包含可变引用字段时。以下是典型错误及修复方案:


❌ 错误实现示例(浅拷贝问题)

java

class Person implements Cloneable {
    private String name;
    private List<String> hobbies; // 可变引用字段

    public Person(String name, List<String> hobbies) {
        this.name = name;
        this.hobbies = hobbies;
    }

    // 错误:浅拷贝 clone() 方法
    @Override
    public Person clone() {
        try {
            return (Person) super.clone(); // 仅复制引用,不复制列表内容
        } catch (CloneNotSupportedException e) {
            throw new AssertionError();
        }
    }
}

问题
克隆后的对象与原对象共享同一个 hobbies 列表。修改任一对象的 hobbies 会影响另一个对象。


✅ 修复方案 1:深度拷贝(Deep Copy)

手动复制所有可变引用字段:

java

@Override
public Person clone() {
    try {
        Person cloned = (Person) super.clone();
        // 深度拷贝:创建新的 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zqmattack

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值