Как сделать конструктор, который принимает 2, если есть 2 параметра, или 3, если есть 3 - PullRequest
4 голосов
/ 20 июля 2011

Новое в Java ...

У меня есть класс имени, который имеет:

private String firstName;
private String middleInitial;
private String lastName;

в качестве переменных экземпляра.

Если бы у меня были определенные данные, которые имели только firstName и lastName, без middleInitial, как бы я сделал конструктор так, чтобы он принимал только 2 параметра вместо трех?

Ответы [ 9 ]

10 голосов
/ 20 июля 2011

Вы просто пишете конструктор с двумя параметрами и конструктор с тремя

public YourClass(String firstName, String lastName) {
   ...
}

public YourClass(String firstName, String middleInitial, String lastName) {
    ...
}

После этого вызывающие абоненты могут выбрать подходящий конструктор в зависимости от своих потребностей.

8 голосов
/ 20 июля 2011

Ну, два варианта:

  • Просто иметь конструктор с тремя параметрами и вызывать его, используя null или пустую строку для middleInitial
  • Перегрузить конструкторы, возможно вызываяодин из другого.

В качестве примера для последнего, используя пустую строку в качестве средней инициалы по умолчанию:

public Person(String firstName, String middleInitial, String lastName)
{
    this.firstName = firstName;
    this.middleInitial = middleInitial;
    this.lastName = lastName;
}


public Person(String firstName, String lastName)
{
    this(firstName, "", lastName);
}

Однако компилятору нужно будет знать, какой из нихВы звоните с сайта звонков.Таким образом, вы можете сделать:

new Person("Jon", "L", "Skeet");

или

new Person("Jon", "Skeet");

... но вы не можете сделать:

// Invalid
new Person(firstName, gotMiddleInitial ? middleInitial : ???, lastName);

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

2 голосов
/ 20 июля 2011

В Java конструкторы не могут иметь аргументы по умолчанию. Ваш единственный вариант здесь - написать два конструктора. К счастью, Java позволяет вам вызывать конструкторы из других конструкторов. Вы можете сделать что-то вроде:

public class MyClass {
    private String firstName;
    private String middleInitial;
    private String lastName;

    public MyClass(String firstName, String middleInitial, String lastName) {
        this.firstName = firstName;
        this.middleInitial = middleInitial;
        this.lastName = lastName;
    }

    public MyClass(String firstName, String lastName) {
        this(firstName, "", lastName);
    }

    ...
}
1 голос
/ 20 июля 2011
public Class Name{
private String first;
private String middle;
private String last;

public Name(String first, String middle, String last){
this.first = first;
this.middle = middle;
this.last = last;
}

public Name(String first, String last){
this.first = first;
this.last = last;
}

}
0 голосов
/ 28 октября 2015

Образец строителя ...

class Name {

            Builder builder;


            public String getSurname() {
                return builder.surname;
            }

            // getter...


            public Name(Builder builder) {
                this.builder = builder;
            }


            class Builder {

                String surname = "";
                String middleName = "";
                String name = "";


                Builder surname(String surname) {
                    this.surname = surname;
                    return this;
                }


                Builder middleName(String middleName) {
                    this.middleName = middleName;
                    return this;
                }


                Builder name(String name) {
                    this.name = name;
                    return this;
                }


                Name build() {
                    return new Name(this);
                }

            }
        }
0 голосов
/ 20 июля 2011
public void myBike(String name, String color)
{
      System.out.println("My bike's name is " + name + " and is " + color + ".");
}

public void myBike(String name, String color, float height)
{
      System.out.println("My bike's name is " + name + " and is " + color + ".");
      System.out.println("My bike is also " + height + " inches tall.");
}
0 голосов
/ 20 июля 2011

Вы можете написать два конструктора.

public Person( String firstName, String lastName, String middleName ) { ... }

public Person( String firstName, String lastName ) { ... }
0 голосов
/ 20 июля 2011

Определите 2 конструктора, один с 2 параметрами и один с 3 параметрами.

0 голосов
/ 20 июля 2011

Вы можете использовать два конструктора:

public Person(String firstName, String lastName)
{
    this(firstName, null, lastName);
}

public Person(String firstName, String middleInitial, String lastName)
{
    this.firstName     = firstName;
    this.middleInitial = middleInitial;
    this.lastName =    = lastName;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...