我应该在Builder模式中使用原始数据类型还是包装器数据类型

时间:2019-04-01 16:02:43

标签: java design-patterns builder

是使用包装器类数据类型作为构建器模式中的参数,然后在构建方法期间将其转换为原始数据还是原始数据类型?还是最好在整个构建器模式中使用原始数据类型并进行所有数据转换?控制器或调用构建器模式的方法中可以为空的数据类型?

   public Builder recent(final Boolean recent) {
        if (recent != null) {
            this.recent = recent;
        }
        return this;
    }

vs

    public Builder recent(final boolean recent) {
        this.recent = recent;
        return this;
    }

1 个答案:

答案 0 :(得分:3)

这取决于null值是否有效。

您的两个示例的语义略有不同。

public Builder recent(final Boolean recent) {
        if (recent != null) {
            this.recent = recent;
        }
        return this;
    }

上面的内容实际上是说this.recent实际上可以保存一个null值(如果它的类型也是Boolean),但是一旦将其设置为非null值,它就会即使呼叫者需要它并传递null(您是否想要),它也永远不会返回?

public Builder recent(final boolean recent) {
        this.recent = recent;
        return this;
    }

这就是说recent可以设置为truefalse。如果null实际上是this.recent类型,则呼叫者不会被误认为他可以将其设置回Boolean。如果您有合理的默认值,则甚至可以选择直接将this.recent设置为该默认值,从而最大程度地减少了在其他地方获得错误的机会NullPointerException