Java 检查对象是否为null以准备映射的最佳方法
我正在尝试将一个对象映射到另一个对象,但我很难确定检查要映射的对象是否为空的最佳做法 1- 2-Java 检查对象是否为null以准备映射的最佳方法,java,null,mapping,Java,Null,Mapping,我正在尝试将一个对象映射到另一个对象,但我很难确定检查要映射的对象是否为空的最佳做法 1- 2- 有什么好的做法可以做到这一点吗?显然,这归结为风格,因此没有硬性的规则告诉我们哪个版本是“最好的”。如果您的团队编写的所有代码都遵循方案1,那么这就是最适合您的代码 话虽如此,我还是喜欢一个简单的初始保护,然后是计算“真实”结果的代码,如下所示: if (in == null) return null; DTOIntIdentityDocument out = new DTOIntI
有什么好的做法可以做到这一点吗?显然,这归结为风格,因此没有硬性的规则告诉我们哪个版本是“最好的”。如果您的团队编写的所有代码都遵循方案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参数
最后:理想的解决方案不需要担心空参数。只是因为你像瘟疫一样避免了空值。不总是可能的,但总是可取的 显然,这归结为风格,因此没有硬性规定告诉我们哪个版本是“最好的”。如果您的团队编写的所有代码都遵循方案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;
}
话虽如此,我还是喜欢一个简单的初始保护,然后是计算“真实”结果的代码,如下所示:
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参数
最后:理想的解决方案不需要担心空参数。只是因为你像瘟疫一样避免了空值。不总是可能的,但总是可取的 在第一个示例中,不需要
else
。如果If
通过,则将返回null
。如果没有,它将继续并像else
一样运行。这是个人编码实践的问题。但是,如果代码可能从多个点返回,我更喜欢第二种方法,而不是将多个返回语句分散在方法中。在第一个示例中,不需要else
。如果If
通过,则将返回null
。如果没有,它将继续并像else
一样运行。这是个人编码实践的问题。但是,如果代码可能从多个点返回,我更喜欢第二种方法,而不是将多个返回语句分散在整个方法中。有一个很好的材料解释了为什么我们应该坚持使用最明显和最口头的返回语句,如果有几种情况可能导致您使用同一个返回子句,那么即使是为了可读性,也要将它们分开。@dbl我不喜欢“通用”规则。每种情况都有一点不同。有时你不得不牺牲一点可读性,例如为了避免代码重复。旧的“单输入单输出”原则仍然有它的优点。例如“选项2”“当您想要调试/跟踪该方法时,从OP开始工作会更好,因为最终的结果很容易通过这个不同的out变量访问。有一个很好的材料解释了为什么我们应该坚持使用最明显的和口头的返回语句,如果有几种情况可能导致您使用同一个返回子句,甚至为了可读性而将它们分开。@dbl我不喜欢“通用”规则。每种情况都有点不同。有时候你不得不牺牲一点可读性,例如为了避免代码重复。旧的“一进一出”原则仍有其优势。例如,当您想要调试/跟踪该方法时,OP中的“选项2”工作得更好,因为最终的结果很容易通过该DISTINCE out变量访问。如果明天另一个(同一个)开发人员尝试使用该映射器,但在传递该映射器之前忘记检查参数,会发生什么?这种方法已被证明不适用于有一个或多个成员的团队……如果明天另一个(同一个)开发人员尝试使用该映射器,并且在通过它之前忘记检查参数,会发生什么情况?这种方法已被证明不适用于有一个或多个成员的团队。。。
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;
}