Ho la seguente classe abbreviata:
public class Player {
final private DoubleDuple position;
final private DoubleDuple momentum;
public Player() {
position = new DoubleDuple(0, 0);
momentum = new DoubleDuple(0, 0);
}
public Player(double xPos, double yPos) {
position = new DoubleDuple(xPos, yPos);
momentum = new DoubleDuple(0, 0);
}
public Player(double xPos, double yPos, double xMom, double yMom) {
position = new DoubleDuple(xPos, yPos);
momentum = new DoubleDuple(xMom, yMom);
}
}
Con i campi elencati come final
, non posso semplicemente fare in modo che ogni costruttore più complicato chiami ogni costruttore più semplice, poiché il campo final
verrà quindi assegnato due volte; che non è consentito.
Se però, ho rimosso il modificatore final
dai campi, potrei cambiare l'ultimo costruttore in:
public Player(double xPos, double yPos, double xMom, double yMom) {
this(xPos, yPos);
momentum = new DoubleDuple(xMom, yMom);
}
Che trovo più ordinato. In questo esempio, non è molto di un cambiamento, ma in situazioni in cui ci sono più campi che hanno valori predefiniti, sarebbe bello non dover ripetere me stesso in ogni costruttore (DRY).
Domande:
- Quando si ha a che fare con i campi di
final
, c'è un modo per non ripetermi in ogni costruttore? - Chiedo a questo di rispettare il principale di DRY (non ripeterlo). Dovrei pensare in questo modo?