A robust method
Consider the specification of the
/** * Retrieve the value stored at the given index. * * @param index representing a position in this list. * Pre: 0 <= index < length * @return value at the given index. */ T get(int index);
A client of
get (any method that calls it) is responsible to ensure the pre-condition is met. The
get method can check the validity of its input too. (It is not always the case that a method will be able to check and ensure its pre-conditions are met.)
A robust method is one that handles bad (invalid or absurd) inputs reasonably.
Java’s exception handling mechanism supports the construction of robust methods.
Let’s update the specification/declaration of
IndexedList.get to make it robust.
/** * Retrieve the value stored at the given index. * * @param index representing a position in this list. * @return value at the given index. * @throws IndexOutOfBoundsException when index < 0 or index >= length. */ T get(int index) throws IndexOutOfBoundsException;
Notice we have removed the pre-condition. Instead, the method throws
IndexOutOfBoundsException when `index is out of range.