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

标签 java null 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 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/

相关文章:

java - 关于包含无法连载的成员的连载

java - 在给定时间查找 .wav 的 'volume'

java - 可以将 null 分配给值类型变量或与值类型变量进行比较吗?

java - Java 中的 Null 安全取消引用,如 ?.在 Groovy 中使用 Maybe monad

python - 优化: Search the best way to compare two list of dict (Python)

java - 找不到符号 intellij gradle

java - java赋值中的魔数(Magic Number)问题

Postgresql时间戳和NULL区别

java - 在 Spring MVC 中映射/(root URL)

java - 为什么 Hibernate 会重复对象,尽管数据库表不包含重复行?