【发布时间】:2009-05-15 07:47:18
【问题描述】:
我需要比较两个对象(同一类的实例)中的数十个字段,并进行一些记录和更新以防有差异。元代码可能如下所示:
if (a.getfield1 != b.getfield1)
log(a.getfield1 is different than b.getfield1)
b.field1 = a.field1
if (a.getfield2!= b.getfield2)
log(a.getfield2 is different than b.getfield2)
b.field2 = a.field2
...
if (a.getfieldn!= b.getfieldn)
log(a.getfieldn is different than b.getfieldn)
b.fieldn = a.fieldn
包含所有比较的代码非常简洁,我想以某种方式使其更紧凑。如果我可以有一个方法,该方法将作为参数调用 setter 和 getter,并为所有字段调用它,那就太好了,但不幸的是,这在 java 中是不可能的。
我提出了三个选项,每个选项都有自己的缺点。
1.使用反射 API 找出 getter 和 setter
丑陋的,如果字段名称更改可能会导致运行时错误
2.将字段更改为 public 并直接操作它们而不使用 getter 和 setter
也很丑,并且会将类的实现暴露给外部世界
3.让包含类(实体)进行比较,更新更改的字段并返回日志消息
实体不应参与业务逻辑
所有字段都是String类型,如果需要,我可以修改拥有这些字段的类的代码。
编辑:类中有一些字段不能比较。
【问题讨论】:
-
您是在比较两个不同类的实例还是同一类的两个实例?
-
它们是同一类的实例。我编辑了这个问题。感谢您指出这一点。
标签: java reflection