我正在尝试将一个对象映射到另一个对象,但无法确定检查要映射的对象是否为 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 block ...实际上不需要位于自己的 block 中,并带有额外的缩进。另一方面,您的第二个片段使用三个不同的抽象层:一个简单的赋值、一个 if block 、一个简单的返回。这绝对比选项 1 或我上面使用的修改后的代码“更复杂”。但请注意:选项 2 也有其优点。如果您想要/必须跟踪/记录该方法的结果,请使用选项 2,在 return 语句之前添加一个 trace(out)
。
郑重声明:当你使用“硬核”的干净代码时,该方法最终会显示为:
if (in == null)
return null;
return createDocumentFrom(in);
或者类似的东西。含义:您将实际创建和配置结果对象的代码推送到其自己的私有(private)方法中。而且该方法不需要担心传入空参数!
最后:理想的解决方案不需要担心空参数。仅仅是因为你像瘟疫一样避免 null 。并不总是可能,但总是令人向往!
关于java - 检查对象是否为空以准备映射的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56866137/