2013-12-21 2 views
0

Я пытаюсь выяснить, как сделать отдельные методы toString на основе перегруженного конструктора. Возьмите ниже код, например:toString метод для перегруженного конструктора

public class Employee { 
    private double salary; 
    private String name; 

    public Employee(String name) { 
      this.name = name; 
    } 

    public Employee(String name, int salary) { 
      this.name = name; 
      this.salary = salary; 
    } 

} 

Теперь я хотел бы реализовать метод ToString, который зависит от созданного объекта и вывода соответствующих значений (то есть тот, который выводит только имя, а другой, который выводит имя. и зарплата) Нужен ли мне только один метод toString и нужно добавить инструкцию if-else?

Извините, если это глупый вопрос, я просто изучаю веревки Java.

+3

методы не имеют никакого отношения к конструктору, который был использован для создания объекта они вызывались на. –

+0

метод toString() должен просто отображать значение 0 для зарплаты, если используется только конструктор name. Реализация toString() НЕ должна зависеть от используемого конструктора. – camickr

+0

В общем случае вы можете объявить класс 'enum' и частный (вероятно,' final') член класса, который указывает, какой конструктор вы использовали, и установить его в каждом конструкторе; то 'toString()' может «переключиться» на него. Это может быть слишком тяжелым решением для такой простой проблемы. – ajb

ответ

0

toString(), но вы можете определить «состояние» объекта и соединить строку соответствующим образом. Например, вы можете получить зарплату -1, указав, что был вызван первый конструктор. Таким образом, ваш toString() будет выглядеть так:

@Override 
public String toString() { 
    if (salary < 0) { 
     ... 
    } else { 
     ... 
    } 
} 

Не забудьте установить salary в -1 в первом конструкторе.

+0

Отлично! Огромное спасибо. – dgalati54

+0

Лучше избегать «волшебных чисел»; если вы сделаете это, лучше добавить что-то вроде 'private static final double NO_SALARY = -1' и использовать' NO_SALARY' вместо '-1' в остальной части класса. Кроме того, не рекомендуется использовать 'double' для денежных сумм. – ajb

+0

@ajb Я не думаю, что '-1' квалифицируется как« магическое число », которое требует собственной переменной. Что касается 'double': вы правы, но это не относится к вопросу OP. – arshajii

0

Во-первых, сделайте свою зарплату отрицательной двойной (надеюсь, никто не заплатит за работу) ... тогда, по умолчанию ваше поле name равно null. Наконец, проверьте для null (или отрицательных) значение toString(). Так, что-то вроде этого -

private double salary = -1; 
private String name = null; 

public Employee(String name) { 
    this.name = name; 
} 

public Employee(String name, double salary) { // <-- salary isn't an int. 
    this.name = name; 
    this.salary = salary; 
} 

public String toString() { 
    StringBuilder sb = new StringBuilder(); 
    if (name != null) { 
    sb.append(name); 
    if (salary > 0) { // = only if both are valid. 
     sb.append(" = "); 
    } 
    } 
    if (salary > 0) { 
    sb.append(salary); 
    } 
    return sb.toString(); 
} 
+0

Что случилось с использованием '-1'? – arshajii

+0

Используя коробку «Double» ... eww, это ужасно для производительности и совершенно ненужно. – mc10

+0

@arshajii Может быть неприемлемым для бизнеса. Конечные пользователи придирчивы. –

0

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

Если, как вы сказали, печать или вывод-ной зарплату и имя, вы должны создать такие методы, как:

public String printName(){ 
     return name; 
} 

public String printAll(){ 
     return name + "" + String.valueOf(salary); 
} 
Смежные вопросы