如何检查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
信息的某个类,这应该是一个明确的标志

有很多方法可以安全地比较对象。考虑使用:

  • Objects.equals
    来自JDK
  • ObjectUtils
    from

这不是代码编写服务。不清楚你为什么不能自己写这篇文章。