检查对象是否为空以准备映射的最佳方法

时间:2019-07-03 08:40:28

标签: java null mapping

我正在尝试将一个对象映射到另一个对象,但是我无法确定最好的做法是检查要映射的对象是否为空

1-

public DTOIntIdentityDocument mapIdentityDocument(Identitydocument in) {
        if (in == null) {
            return null;
        } else {
            DTOIntIdentityDocument out = new DTOIntIdentityDocument();
            out.setDocumentType(this.mapDocumentTypeÇ(in.getDocumenttype()));
            out.setDocumentNumber(in.getDocumentnumber());
            return out;
        }
    }

2-

public DTOIntIdentityDocument mapIdentityDocument(Identitydocument in) {
        DTOIntIdentityDocument out = null;

        if (in != null) {
            out = new DTOIntIdentityDocument();
            out.setDocumentType(this.mapDocumentTypeÇ(in.getDocumenttype()));
            out.setDocumentNumber(in.getDocumentnumber());
        }

        return out;
    }

??关于什么是最佳做法的任何想法?

2 个答案:

答案 0 :(得分:2)

显然,这归结为样式,因此没有硬性规定可以告诉我们哪个版本是“最佳”版本。如果您的团队编写的所有代码都遵循方案1,则这是最适合您的代码。

话虽如此,我更喜欢一个简单的初始防护,然后是计算“真实”结果的代码,如下所示:

 if (in == null) 
     return null;

DTOIntIdentityDocument out = new DTOIntIdentityDocument();
out.setDocumentType(this.mapDocumentTypeÇ(in.getDocumenttype()));
out.setDocumentNumber(in.getDocumentnumber());
return out;

您想要编写易于阅读和理解的代码。您的第一个版本具有该 else 块...实际上不需要在其自己的块中,并且带有附加的缩进。另一方面,您的第二个片段使用了三个不同的抽象层:一个简单的赋值,一个if块,一个简单的返回。这肯定比选项1或我上面使用的修改代码“更复杂”。但请注意:选项2也有其优点。如果您希望/必须跟踪/记录该方法的结果(使用选项2),请在return语句之前添加一个trace(out)

记录在案:当您使用“硬核”清晰代码时,该方法最终将显示为:

if (in == null) 
     return null;

return createDocumentFrom(in);

或类似的东西。含义:将实际创建和配置结果对象的代码推送到其自己的私有方法中。而且该方法无需担心会传入null参数!

最后:理想解决方案无需担心空参数。只是因为您避免像瘟疫一样避免使用null。并非总是可能,但总是可取!

答案 1 :(得分:-1)

if(in != null) 
   mapIdentityDocument(in)

public DTOIntIdentityDocument mapIdentityDocument(Identitydocument in) {
        DTOIntIdentityDocument out = new DTOIntIdentityDocument();
        out.setDocumentType(this.mapDocumentTypeÇ(in.getDocumenttype()));
        out.setDocumentNumber(in.getDocumentnumber());
        return out;

 }