вызов методов set от конструктора

Каково за и против обращения к мутатору от конструктора (если таковые имеются)

т.е.:

public MyConstructor(int x) {
  this.x = x;
}

по сравнению с:

public MyConstructor(int x) {
  setX(x);
}

public void setX(int x) {
  this.x = x;
}

У Вас есть предпочтение? (Это не домашняя работа, просто смотря на наш документ стандартов кодирования, где это говорит, чтобы всегда обратиться к мутаторам при установке var экземпляра в конструкторе и я делаю не всегда к этому),

62
задан 4 February 2011 в 04:08

1 ответ

Вызов любого public , static , non-final методы в конструкторе Вам решать, но лучшая практика, никогда не не вызывают такие методы в конструкторе, потому что это, методы могут быть переопределены в подклассах и на самом деле только переопределенной версии этого методы, будет вызвано (При использовании полиморфного поведения).

, Например:

public class Foo {

public Foo() {
    doSmth(); // If you use polymorphic behavior this method will never be invoked
}

public void doSmth() {
    System.out.println("doSmth in super class");
}

public static void main(String[] args) {
    new Bar(200);
}
}

class Bar extends Foo {

private int y;;

public Bar(int y) {
    this.y = y;
}

@Override
public void doSmth() { // This version will be invoked even before Barr object initialized
    System.out.println(y);
}

}

Это распечатает 0.

Для получения дополнительной информации mo читает Bruce Eckel, "Думающий в Java" глава "Polymorphism"

2
ответ дан 31 October 2019 в 13:59

Другие вопросы по тегам:

Похожие вопросы: