您的位置:首页 > 科技 > 能源 > 重庆网站推广_厦门工程信息网_快排seo排名软件_友情链接有哪些

重庆网站推广_厦门工程信息网_快排seo排名软件_友情链接有哪些

2024/11/17 5:50:24 来源:https://blog.csdn.net/qq_16116549/article/details/142529986  浏览:    关键词:重庆网站推广_厦门工程信息网_快排seo排名软件_友情链接有哪些
重庆网站推广_厦门工程信息网_快排seo排名软件_友情链接有哪些

联调中发现了一个很初级,但有容易被忽略的拷贝问题:

错误方式:List<User> us = new ArrayList<>(); // name = "张三"List<User> us1 = new ArrayList<>(us);for (User u : us) {...u.setName("douzi")
}for (User u : us1) {...
}System.out.print(us1); // 姓名修改成douzi了

此种拷贝,如果修改了集合us中的User对象,us1会跟着改变;

找了网上很多方式:

1.clone方式

us的方法里边不存在clone;

2.addAll方法

不是深度拷贝,修改了集合us中的User对象,us1会跟着改变

3.us.stream().collect(Collectors.toList())

不是深度拷贝,修改了集合us中的User对象,us1会跟着改变

4.CollectionUtil.copy(us)

不是深度拷贝,修改了集合us中的User对象,us1会跟着改变;

解决方案:

1.原生写法

List<User> us = new ArrayList<>();List<User> us1 = new ArrayList<>(us.size());
for (int i = 0; i < us.size(); i++) {User u = us.get(i);User tmp = new User();BeanUtil.copyProperties(u, tmp, false);us1.add(tmp);
}

2.hutool工具

List<User> us = new ArrayList<>();List<User> us1 = CglibUtil.copyList(us, User::new);

总结

有时候老鸟也会晕呀!

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com