如何检查Java中两个对象的区别并避免NPE?

时间:2016-07-13 07:03:14

标签: 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;
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我需要记录一些Empty值: F.E.我有oldCall.getCallLogDate()== null和e \ newCall.getCallLogDate()!= null,所以我需要编写类似于:“调用记录时间已更改!旧值为[空],新值为。 ..“;

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

2 个答案:

答案 0 :(得分:0)

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

public Class A
{
    public static void main(string[] args)
    {
        String s = “hello”;
        String w = Changestring(s);
        String x = w; // if you assign s to x, you will just get "hello"
    }

    private string Changestring(string s)
    {
        StringBuilder sb = new StringBuilder();
        sb.Append(s);
        sb.Append(“Hi”);
        return sb.ToString(); // "helloHi"
    }
}   

答案 1 :(得分:0)

首先,这是一个类的可怕的设计。该类应模块化为较小的部分。例如,请注意您的许多字段'名称以call*为前缀。它应该是一个明确的标志,即这些字段应属于某个包含Call信息的类。

有许多解决方案可以比较对象的null-safe方式。考虑使用: