比较几种javabean属性的最佳方法是什么?
2022-09-03 05:25:59
我需要比较两个对象(同一类的实例)中的数十个字段,并进行一些日志记录和更新,以防存在差异。元代码可能如下所示:
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 和 setters
Ugly,如果字段名称更改,可能会导致运行时错误
2. 将字段更改为公共字段并直接操作它们,而无需使用 getter 和 setters
丑陋,并且会将类的实现暴露给外部世界
3. 让包含类(实体)进行比较,更新更改的字段并返回日志消息
实体不应参与业务逻辑
所有字段都是 String 类型,如果需要,我可以修改拥有这些字段的类的代码。
编辑:类中有一些字段不能进行比较。