Каково за и против обращения к мутатору от конструктора (если таковые имеются)
т.е.:
public MyConstructor(int x) {
this.x = x;
}
по сравнению с:
public MyConstructor(int x) {
setX(x);
}
public void setX(int x) {
this.x = x;
}
У Вас есть предпочтение? (Это не домашняя работа, просто смотря на наш документ стандартов кодирования, где это говорит, чтобы всегда обратиться к мутаторам при установке var экземпляра в конструкторе и я делаю не всегда к этому),
Вызов любого 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"