构造函数中有很多参数

2022-09-01 11:34:20

构造函数中有很多参数是错误的吗?喜欢 10 到 15 个参数?因为我正在设计一个类,其中构造函数将具有许多参数,例如,一个类。Person

我的示例 person 类在其构造函数中有 6 个参数:

public class Person {
    private String fName;
    private String lName;
    private String mInitial;
    private int age;
    private String contactNumber;
    private String emailAddress;

    public Person(String fName, String lName, String mInitial, int age, String contactNumber, String emailAddress) {
       //insert rest of code here 
    }
}

这是错的吗?为构造函数创建大量参数?

然后我计划创建一个名为 的类,然后将其扩展到person类,然后它也将具有一个长构造函数。Employee

让我担心的是练习,这是好事还是什么?还有其他建议吗?


答案 1
  1. 通常,如果您发现自己有太多的参数,则意味着您没有足够的低级类。在你的情况下,你可以有一个,也许有一个class Name { /* fname, lname, initial, */ }class Contact { /* email, phone */ }

  2. 扩展类时,让构造函数将基数作为一个参数,然后添加新的额外参数。(你的意思是员工会扩展Person,而不是反之亦然,所以public Employee (Person person, Company company, String employeeId) { super(person); this.company = company; this.employeeId = employeeId; }

问得好!


答案 2

不使用伸缩构造函数模式,而是使用生成器模式

public class Person {
    private final String fName;
    private final String lName;
    private final String mInitial;
    private final int age;
    private final String contactNumber;
    private final String emailAddress;

    public Person(PersonBuilder builder) {
       //insert rest of code here 
       fName = builder.fName;
       ...
    }

    public static class PersonBuilder {
        private String fName;
        private String lName;
        private String mInitial;
        private int age;
        private String contactNumber;
        private String emailAddress;
        // setter methods
        public PersonBuilder setFirstName(String name) {
             fName = name;
             return this;
        }
        ...
        // build method
        public Person build() {
            return new Person(this);
        }

    }
}

...

Person p = new PersonBuilder()
              .setFirstName("")
              // set all the setter methods
              .build();