Java项目C中 有一处逻辑,对于资源数据(类型为ResourceItem,拥有int/double/boolean/String类型数十个字段),需要比对资源数据每次变更的差异,并描述出变更情况。并非所有的字段都需要比对,如id字段则不参与比对。
 
依次比对每一个字段编写代码比对,将是个重苦力活。高级语言给予了我们诸多便利,应当加以利用。
 
首先定义自己的注解,value值用作字段描述
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface RevisionColumn {
    String value();
}
 
为ResourceItem所有待比对字段添加该注解,如
public class ResourceItem {
    private int id;
    private int revision;
    private ResourceItemStatus status;
 
    @RevisionColumn("节点")
    private String node;
 
    @RevisionColumn("是否物理隔离")
    private boolean physicalIsolation;
 
    @RevisionColumn("整机:单盘上限(%)")
    private int machineDiskLimit;
   
    //...
}
 
介绍比对逻辑前,首先定义记录对象字段差异的实体类型
public class FieldChangeInfo implements Serializable{
    private String propertyName;
    private String propertyHeader;
    private Object from;
    private Object to;
 
    public FieldChangeInfo() {
    }
 
    public FieldChangeInfo(String propertyName, String propertyHeader, Object from, Object to) {
        this.propertyName = propertyName;
        this.propertyHeader = propertyHeader;
        this.from = from;
        this.to = to;
    }
 
    @Override
    public boolean equals(Object obj) {
        if (!(obj instanceof FieldChangeInfo))
            return false;
        if (obj == this)
            return true;
 
        FieldChangeInfo rhs = (FieldChangeInfo) obj;
        return new EqualsBuilder().
                append(propertyName, rhs.propertyName).
                append(propertyHeader, rhs.propertyHeader).
                append(from, rhs.from).
                append(to, rhs.to).
                isEquals();
    }
 
    public String getPropertyName() {
        return propertyName;
    }
 
    public void setPropertyName(String propertyName) {
        this.propertyName = propertyName;
    }
 
    public String getPropertyHeader() {
        return propertyHeader;
    }
 
    public void setPropertyHeader(String propertyHeader) {
        this.propertyHeader = propertyHeader;
    }
 
    public Object getFrom() {
        return from;
    }
 
    public void setFrom(Object from) {
        this.from = from;
    }
 
    public Object getTo() {
        return to;
    }
 
    public void setTo(Object to) {
        this.to = to;
    }
}
FieldChangeInfo

相关文章:

  • 2022-01-05
  • 2022-12-23
  • 2022-12-23
  • 2021-12-25
  • 2022-12-23
  • 2021-05-28
  • 2021-07-24
猜你喜欢
  • 2022-12-23
  • 2021-09-25
  • 2022-12-23
  • 2021-09-09
  • 2022-12-23
  • 2021-11-19
  • 2022-12-23
相关资源
相似解决方案