繁体   English   中英

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

[英]Best way to check if an object is null to prepare for mapping

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

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;
    }

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

显然,这归结为样式,因此没有硬性规定可以告诉我们哪个版本是“最佳”版本。 如果您的团队编写的所有代码都遵循方案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。 并非总是可能,但总是可取!

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;

 }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM