Подтвердить что ты не робот

Имея множество параметров в конструкторе

Неправильно ли иметь много параметров внутри конструктора? как 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 
    }
}

это неправильно? создавая множество параметров для конструктора? то я планирую создать класс с именем Employee, а затем расширить его до класса person, после чего у него снова будут длинные конструкторы. то, что меня беспокоит, это практика, это хорошо или что? любые другие предложения? извините за мой плохой английский

4b9b3361

Ответ 1

  • В общем, если у вас слишком много параметров, это означает, что у вас недостаточно низкоуровневых классов. В вашем случае у вас может быть class Name { /* fname, lname, initial, */ } и, возможно, class Contact { /* email, phone */ }

  • Когда вы расширяете свой класс, создайте конструктор базой как один параметр, а затем добавьте новые дополнительные параметры. (Вероятно, вы имеете в виду, что Employee расширяет 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();

Ответ 3

Вы можете разложить Person на Name и Contact.

public class ComposedPerson {
    private Name name;
    private int age;
    private Contact contact;

    public ComposedPerson(Name name, int age, Contact contact) {
        this.name = name;
        this.age = age;
        this.contact = contact;
    }

    public static void main(String... args) {
        Name name = new Name("John");
        Contact contact = new Contact("12345", "[email protected]");
        ComposedPerson person = new ComposedPerson(name, 45, contact);
   }

Пример Name. Посмотрите, как я использую конструктор телескопа, чтобы разрешить дополнительные аргументы.

public class Name {
    private String fName;
    private String lName;
    private String mInitial;

    public Name(String fName) {
        this(fName, null, null);
    }

    public Name(String fName, String lName) {
        this(fName, lName, null);
    }

    public Name(String fName, String lName, String mInitial) {
        this.fName = fName;
        this.lName = lName;
        this.mInitial = mInitial;
    }
} 

Ответ 4

Да, нехорошо иметь много параметров в любых функциях. Максимальные параметры должны быть около 7, в соответствии с книгой с именем Code Complete 2.

Это связано с тем, что это уменьшит удобство чтения и и юзабилити. Представьте, что другие разработчики работают над одним и тем же проектом, как следовать вашему коду?

Существует множество способов управления этим шаблоном factory, например. Это зависит от того, как вы разрабатываете свое приложение.

Но в вашем коде я думаю, что это нормально, что нет. параметров по-прежнему приемлемы (6 параметров)

Если вашему объекту требуется так много параметров для создания экземпляра, вам нужно переосмыслить, как вы разрабатываете свой код. Например, могут ли некоторые атрибуты обернуться в отдельный класс? может ли какой-либо атрибут не обязательно проходить в качестве параметра? т.е. получить значение из другого класса. и т.д...