需求:比较两个相同的对象,得到不同的属性值的属性和属性值,后面才是重点:对像里面包含其他的对象,也要拿出来,例如:两个user对象,user里面包含部门,如果两个user下面的部门不一致,要得到分别的部门名称,user还有标签组(是个集合),如果不同也有得到,有办法做吗?
10条回答 默认 最新
- threenewbee 2018-01-12 15:40关注
反射遍历属性,遇到属性是对象的,递归比较
这里有个例子:
public class CompareObject { public static void main(String[] args) { Dog dog1 = new Dog("大师兄的dog", true, true); Dog dog2 = new Dog("大师兄的dog", false, false); List<Dog> dogs = Lists.newArrayList(); List<Dog> myDogs = Lists.newArrayList(); dogs.add(dog1); myDogs.add(dog2); List<String> boys = Lists.newArrayList("tom", "jerry", "jack"); //List<String> myBoys = Lists.newArrayList("tom", "jerry", "jack");//这行注释打开,下行代码注释掉,则boys属性就相同了 List<String> myBoys = Lists.newArrayList("tom hanks", "gery", "pul"); Car car1 = new Car("q7", 182, dogs, boys); Car car2 = new Car("a6", 152, myDogs, myBoys); contrastObj(car1, car2); } private static void contrastObj(Object obj1, Object obj2) { if (obj1 instanceof Car && obj2 instanceof Car) { Car pojo1 = (Car) obj1; Car pojo2 = (Car) obj2; List<String> textList = Lists.newArrayList(); try { Class clazz = pojo1.getClass(); Field[] fields = pojo1.getClass().getDeclaredFields(); for (Field field : fields) { PropertyDescriptor pd = new PropertyDescriptor(field.getName(), clazz); Method getMethod = pd.getReadMethod(); Object o1 = getMethod.invoke(pojo1); Object o2 = getMethod.invoke(pojo2); String s1 = o1 == null ? "" : o1.toString();//避免空指针异常 String s2 = o2 == null ? "" : o2.toString();//避免空指针异常 //思考下面注释的这一行:会bug的,虽然被try catch了,程序没报错,但是结果不是我们想要的 //if (!o1.toString().equals(o2.toString())) { if (!s1.equals(s2)) { textList.add("不一样的属性:" + field.getName() + " 属性值:[" + s1 + "," + s2 + "]"); } } } catch (Exception e) { System.out.println(e.getMessage()); } for (Object object : textList) { System.out.println(object); } } } }
具体看这里:http://blog.csdn.net/qq_27093465/article/details/62453581
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥20 需要帮我远程操控一下,运行一下我的那个代码,我觉得我无能为力了
- ¥20 有偿:在ubuntu上安装arduino以及其常用库文件。
- ¥15 请问用arcgis处理一些数据和图形,通常里面有一个根据点划泰森多边形的命令,直接划的弊端是只能执行一个完整的边界,但是我们有时候会用到需要在有很多边界内利用点来执行划泰森多边形的命令
- ¥30 在wave2foam中执行setWaveField时遇到了如下的浮点异常问题,请问该如何解决呢?
- ¥750 关于一道数论方面的问题,求解答!(关键词-数学方法)
- ¥200 csgo2的viewmatrix值是否还有别的获取方式
- ¥15 Stable Diffusion,用Ebsynth utility在视频选帧图重绘,第一步报错,蒙版和帧图没法生成,怎么处理啊
- ¥15 请把下列每一行代码完整地读懂并注释出来
- ¥15 寻找公式识别开发,自动识别整页文档、图像公式的软件
- ¥15 为什么eclipse不能再下载了?