内联字段初始化vs构建器更好

时间:2015-07-29 08:13:54

标签: java builder

我创建了一个包含许多字段的类,我希望根据一些默认值初始化它们,同时根据我的需要设置几个字段。我为这个类交叉了两个解决方案。内联字段初始化和构建器。任何意见?我知道构建器模式很流行,但为什么不使用默认的内联字段初始化?

//Inline field initialization:

class foo{
    int a = 0;
    int b = 1;

    public foo setA(int a){this.a = a; return this;}
    public foo setB(int b){this.b = b; return this;}
}

//use foo
foo f = new foo().setA(1).setB(2);

//builder
class bar(){
    int a;
    int b;
    bar(int a, int b){this.a = a; this.b = b}
    public static class Builder(){
        int a = 0;
        int b = 0;
        public bar build(){
            return new bar(a, b);
        }

        public Builder a(int a){this.a = a; return this;}
        public Builder b(int b){this.b = b; return this;}
    }
}

// use
bar b = bar.Builder.build().a(1).b(2);

2 个答案:

答案 0 :(得分:1)

面对许多构造函数参数时,需要考虑构建器模式。 使用大量可选参数,构造函数不能很好地扩展 请参阅:有效Java中的第2项http://www.informit.com/articles/article.aspx?p=1216151&seqNum=2
如果你的字段数不会增加到很多,那么我宁愿选择Inline字段初始化,因为这意味着编写的代码总是很好。

答案 1 :(得分:0)

使用构建器模式的主要优点是它允许您以任何顺序提供参数。例如,使用内联字段时,您应始终按此顺序传递ab。使用构建器,您可以按任何顺序传递它们。当构造函数的参数数量变得太大时,无论是否创建不可变对象,构建器模式肯定会有所帮助。

相关问题