欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

java8 实现map以value值排序操作

程序员文章站 2022-04-29 13:35:00
我就废话不多说了,大家还是直接看代码吧~补充知识:对beancopier拷贝对象中list类型属性的思考背景最近开发接口过程中,使用beancopier拷贝对象,当对象中嵌套自定义对象类型属性的时候,...

我就废话不多说了,大家还是直接看代码吧~

补充知识:对beancopier拷贝对象中list类型属性的思考

背景

最近开发接口过程中,使用beancopier拷贝对象,当对象中嵌套自定义对象类型属性的时候,

如果对象名称一致,但是对象类型不一致,拷贝的时候,该属性是会被忽略的,但是当对象中嵌套list集合类型属性(集合中是不同的对象类型)时,使用beancopier拷贝之后,返回给前台的数据是正确的,感觉不太懂其中的原理,就测试了下。

测试过程

新建几个对象

拷贝beana1到beanb1

转换结果如下图所示:对象类型被忽略

java8 实现map以value值排序操作

cglib生成的代理类如下所示

从copy实现代码中可以看到,不同对象类型属性间的拷贝被忽略

拷贝beana到beanb

转换结果如下图所示,list对象类型属性被成功赋值

java8 实现map以value值排序操作

但是对象beana和benab中的list属性,指向相同的引用,当用classb接收beanb中的list属性中的对象时,

会报对象强转失败

cglib生成的代理类如下所示

从copy的实现代码中可以看到,两个对象中的list类型的对象集合属性被成功赋值,但是是引用赋值

结论

beancopier对不同对象中的list对象集合类型的属性的拷贝是弱拷贝,而不是深拷贝,如果只是做对象拷贝,然后直接抛出这个对象给前台使用是没有问题的,但是如果这个通过拷贝得到的对象要在代码中进行业务流转,则会报java.lang.classcastexception 类强转异常

以上这篇java8 实现map以value值排序操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。