public class PlayerCharacter implements DailyCycle { private static final int MAX_MOVES_REMAINING = 10; private static final int NEW_MOVES_PER_DAY = 3; private int movesRemaining; public PlayerCharacter() { newDay(); // WARNING } @Override public void newDay() { movesRemaining += NEW_MOVES_PER_DAY; if (movesRemaining > MAX_MOVES_REMAINING) { movesRemaining = MAX_MOVES_REMAINING; } } }
What I Do...
I'm not really sure how other people handle this, but like to make a local version of the method (CTRL-SHIFT-M in NetBeans)...public class PlayerCharacter implements DailyCycle { private static final int MAX_MOVES_REMAINING = 10; private static final int NEW_MOVES_PER_DAY = 3; private int movesRemaining; public PlayerCharacter() { newDayLocal(); } @Override public void newDay() { newDayLocal(); } private void newDayLocal() { movesRemaining += NEW_MOVES_PER_DAY; if (movesRemaining > MAX_MOVES_REMAINING) { movesRemaining = MAX_MOVES_REMAINING; } } }
This not only solves the warning, but actually solves the problem. The object is no longer allowing subclasses to inject out-of-sequence code into the constructor by overriding a method.
How do other people handle this? Is there a standard pattern?
No comments:
Post a Comment