Как мне использовать только часть параметров конструкторов? (Java)

#java #parameters #constructor

#java #параметры #конструктор

Вопрос:

Меня попросили создать метод для добавления student в массив с учетом их номера улицы (int) и номера дома (int). Вот пример того, о чем я говорю.

   Student a = new Student("Abigail", 1, 5);
  

Мне разрешено использовать только номер улицы студента и номер дома, который является лишь частью параметров конструктора. Есть ли какой-либо способ связать объект (ученика) только с частью информации?

Вот мой конструктор:

  public Student(String n, int sN, int hN){
        name = n;
        streetNum = sN;
        houseNum = hN;
    }
  

Комментарии:

1. Используйте геттеры / сеттеры

2. То, что вам не нужна дополнительная информация в этом Student объекте, не означает, что никто другой этого не делает. Предполагается, что все параметры конструктора необходимы для допустимого объекта. С другой стороны: почему вы не можете просто игнорировать «дополнительные» параметры конструктора?

Ответ №1:

Вы можете создать другой конструктор с меньшим количеством параметров, подобных этому:

 public class Student {

    public static final String DEFAULT_NAME = "Cookie Monster";
    public static final String DEFAULT_STREET_NUMBER = 46; //Sesame Street Number?   

    private String name;
    private int streetNum;
    private int houseNum;

    public Student(String n, int sN, int hN){
        name = n;
        streetNum = sN;
        houseNum = hN;
    }

    public Student(int sN, int hN){
        this(DEFAULT_NAME, sN, hN);
    }

    public Student(int hN){
        this(DEFAULT_STREET_NUMBER, hN);
    }
}  
  

Комментарии:

1. Второстепенный момент: вы могли бы продолжать вызывать this(...) до конца. Итак, в ctor с одним параметром вы могли бы сделать this(46, hN); , а в одном с двумя this("DEFAULT_NAME", sN, hN); Это помогает уменьшить повторение.

2. Вы совершенно правы. Я просто сделал так, чтобы он мог видеть некоторые из своих опций. На самом деле я отредактирую ответ.

Ответ №2:

я думаю, что есть два способа:

1) Создайте конструктор, подобный этому:

 public Student(int sN, int hN){
        streetNum = sN;
        houseNum = hN;
    }
  

И использовать его как :

   Student a = new Student(1, 5);
  

2) Или, если вы не хотите использовать конструктор, используйте like:

   Student a = new Student("", 1, 5);
  

Ответ №3:

Вы можете использовать null в построении. Например new Student(null, 5, 1) , обычно это возможно, но вы перезаписываете значения по умолчанию с помощью этого метода, например, когда имя по умолчанию равно private String name = "Peter"