2015-09-03 3 views
0

Я хотел знать правильный способ определения конструктора в Java. Это может быть не вопрос, который нужно задать здесь, но все же.Правильный способ определения конструктора?

Предположим, у меня есть этот класс:

public class Element { 
    private String value; 
    private Date timestamp; 

    public String getValue() { 
     return value; 
    } 

    public void setValue(String value) { 
     this.value = value; 
    } 

    public Date getTimestamp() { 
     return timestamp; 
    } 

    public void setTimestamp(Date timestamp) { 
     this.timestamp = timestamp; 
    } 

    public Element(String value, Date timestamp) { 
     this.value = value; 
     this.timestamp = timestamp; 
    } 
} 

Могу ли я определить конструктор с помощью сеттеры?

public Element(String value, Date timestamp) { 
    setValue(value); 
    setTimestamp(timestamp); 
} 

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

+1

Я бы предпочел, чтобы использовать позже, это делает то, что поведение определяются на присваиватель применительно к параметрам конструктор, а также гарантирует согласованность переменного-член , –

+1

Нет правильного пути, это то, что вы предпочитаете, и то, что кто-то может предпочесть. – RamanSB

+0

Кроме того, будут случаи, когда полезно использовать сеттеры для получения того же поведения, и другие, где поведение сеттера должно отличаться от поведения инициализации. Опять же, нет ни одного правильного пути. –

ответ

-1

Да. Вы можете определить конструктор таким образом. Я делал это несколько раз, используя swing (JButtons и т. Д.), И он отлично работал. Это простой способ организовать код - особенно если вы проверяете любой аргумент.

Кроме того, это может помочь с наследованием, где вам нужно только переопределить сеттеры и использовать конструктор суперкласса.

Итак, по крайней мере, для меня второй дизайн лучше.

Ваш вопрос совершенно разумный!

+0

это как-то ** неправильный ** совет, который вы можете дать, потому что вы полагаетесь на побочные эффекты, которые могут меняться с помощью подклассов –

0

Предположим, мы определили ограничение в установщике.

public class Person { 
    private int weight = 0; 

    public Person(int weight) { 
     this.weight = weight; 
    } 

    public void setWeight(int weight) { 
     if(weight > 200) throw new IllegalArgumentException("Weight unreasonable"); 
     this.weight = weight; 
    } 
} 

Теперь, используя установщик, мы можем ввести в класс фильтр, логику или поведение. То, что человек не должен превышать 200. Но с использованием конструктора правило веса не применяется. Вы можете сделать new Person(10000)

Таким образом, чтобы сохранить охрану поведения объекта, ему сообщили, что установщик должен использоваться в конструкторе при установке значения переменной-члена.

public Person(int weight) { 
    setWeight(weight); 
} 

Таким образом, конструктор не будет нарушать намеченное поведение weight

+0

на самом деле это примерно как ** неправильный ** совет, который вы можете дать в этом случае, потому что он полагается на побочный эффект, который может меняться с помощью подклассов –

Смежные вопросы