【问题标题】:How to check difference between two objects in Java and avoid NPE?如何检查Java中两个对象之间的差异并避免NPE?
【发布时间】:2016-07-13 07:03:14
【问题描述】:

我有课

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;

... }

我需要编写一个方法,获取该类的 2 个对象(来自 REST 控制器的 newCall 和来自 DB 的 oldCall)并记录所有更改。

对于 UserDTO 和 CustomerDTO,我需要检查它的 ID。

问题是所有字段(id 除外)都可能为 Null。如果该字段的值为 null 或更改为 null 我需要记录一些空值: f.e.我有 oldCall.getCallLogDate() == null 和 e\newCall.getCallLogDate() != null,所以我需要这样写:“呼叫记录时间已更改!旧值为 [empty],新值为 . ..";

以干净的方式编写此方法的最佳方法是什么? Java 8 是可以接受的

【问题讨论】:

  • 这不是代码编写服务。不清楚为什么你不能自己写这个。

标签: java coding-style


【解决方案1】:

JDK 7 中引入的java.util.Objects 实用程序类有一个简洁的空安全equals(Object, Object) 方法,您可以使用:

if (!Objects.equals(oldCall.getCallLogDate(), newCall.getCallLogDate()) {
    System.out.println("Some useful message...");
}

【讨论】:

    【解决方案2】:

    首先,这是一个可怕类的设计。该类应模块化为更小的部分。例如,请注意您的许多字段名称都以call* 为前缀。应该清楚地表明这些字段应该属于包含Call 信息的某个类。

    有许多比较对象空安全方式的解决方案。考虑使用:

    【讨论】:

      猜你喜欢
      • 2023-03-14
      • 2019-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-08
      • 1970-01-01
      • 2017-03-26
      • 1970-01-01
      相关资源
      最近更新 更多