如何检查Java中两个对象之间的差异并避免NPE?
我有课如何检查Java中两个对象之间的差异并避免NPE?,java,coding-style,Java,Coding Style,我有课 public class CallDTO { private String id; private Integer callOrigin; private CustomerDTO callCustomer; private Integer callType; private Integer callStatus; private UserDTO user; private CustomerDTO callBillingCustomer; private Date callLogDate
public class CallDTO {
private String id;
private Integer callOrigin;
private CustomerDTO callCustomer;
private Integer callType;
private Integer callStatus;
private UserDTO user;
private CustomerDTO callBillingCustomer;
private Date callLogDate;
private Date callRespondDate;
private Date callSolveDate;
private Date callCloseDate;
private String callContactName;
private String callContactTel;
private String callWorkshop;
private String callCustRefNum;
private String callLastComment;
private String checked;
。。。
}
我需要编写一个方法,获取该类的两个对象(来自REST控制器的newCall和来自DB的oldCall)并记录所有更改
对于UserDTO和CustomerDTO,我需要检查它的ID
问题是所有字段(id除外)都可能为空。如果字段的值为null,则更改为null,我需要记录一些空值:
f、 e.我有oldCall.getCallLogDate()==null和e\newCall.getCallLogDate()!=null,所以我需要编写smth,比如:“调用日志记录时间已更改!旧值为[empty],新值为…”
以干净的方式编写此方法的最佳方式是什么?
Java 8是可以接受的JDK 7中引入的实用程序类有一个整洁的空安全方法,您可以使用:
if (!Objects.equals(oldCall.getCallLogDate(), newCall.getCallLogDate()) {
System.out.println("Some useful message...");
}
首先,这是一个非常糟糕的类设计。类应该模块化为更小的部分。例如,请注意,许多字段的名称都以
call*
作为前缀。这些字段应该属于包含Call
信息的某个类,这应该是一个明确的标志
有很多方法可以安全地比较对象。考虑使用:
来自JDKObjects.equals
fromObjectUtils