【问题标题】:Construct object with many private collection fields构造具有许多私有集合字段的对象
【发布时间】:2013-08-15 10:38:07
【问题描述】:

什么是最高效干净的方法来创建一个类的对象,该类对象具有大约 10 个作为集合的私有字段(例如 HashMap、LinkedHashMap、ArrayList 等)。

如果我在其中放置一个包含 10 个字段的构造函数,那将是一场噩梦。

【问题讨论】:

    标签: java constructor coding-style


    【解决方案1】:

    您可以像这样使用Builder

    public class Pojo {
    
        private String field1;
        private String field2;
        private String field3;
        private String field4;
        private String field5;
    
        public Pojo(PojoBuilder pojoBuilder) {
            this.field1 = pojoBuilder.field1;
            this.field2 = pojoBuilder.field2;
            this.field3 = pojoBuilder.field3;
            this.field4 = pojoBuilder.field4;
            this.field5 = pojoBuilder.field5;
        }
    
        public static class PojoBuilder {
            String field1;
            String field2;
            String field3;
            String field4;
            String field5;
    
            public PojoBuilder field1(String field1) {
                this.field1 = field1;
                return this;
            }
    
            public PojoBuilder field2(String field2) {
                this.field2 = field2;
                return this;
            }
            public PojoBuilder field3(String field3) {
                this.field3 = field3;
                return this;
            }
            public PojoBuilder field4(String field4) {
                this.field4 = field4;
                return this;
            }
            public PojoBuilder field5(String field5) {
                this.field5 = field5;
                return this;
            }
    
            public Pojo build() {
                return new Pojo(this);
            }
    
        }
    
        public String getField1() {
            return field1;
        }
    
        public String getField2() {
            return field2;
        }
    
        public String getField3() {
            return field3;
        }
    
        public String getField4() {
            return field4;
        }
    
        public String getField5() {
            return field5;
        }
    
    
    }
    

    你可以这样使用它:

    Pojo pojo = new PojoBuilder().field1("field1").field1("field2").field1("field3").field1("field4").field1("field5").build();
    

    我也经常使用这种模式来构建不可变的 pojo。

    【讨论】:

    • 这里为什么使用final作为字段?如果以后想重用这个对象怎么办?
    • 这是我通常如何使用它的一个示例,但感谢您指出我会删除它们。
    • 嘘删除它们。保持决赛!
    【解决方案2】:

    Builder pattern 怎么样

    YourClass obj = YourClass.setCollection1(...)
                               .setCollection2(...)
                                 .setCollection3(...)......
                                                      .build();
    

    额外的好处是您只需传递所需的值,其余的将保留其默认值。

    【讨论】:

      【解决方案3】:

      考虑Builder Pattern

      YourClass classObject = new YourClass.name("someName").age(26).Sex("M").build();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-12-27
        • 2013-06-05
        • 1970-01-01
        • 2016-10-17
        • 2011-11-17
        • 1970-01-01
        • 1970-01-01
        • 2020-10-25
        相关资源
        最近更新 更多