我正在尝试将一个对象映射到另一个对象,但是我无法确定最好的做法是检查要映射的对象是否为空
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;
}
??关于什么是最佳做法的任何想法?
答案 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;
}