So now let us summarize:
You use exceptions to validate arguments in public and protected methods of public classes. In this case, someone may write a code that violates your preconditions, and you must have a safeguard.
You use assertions to validate arguments in other cases.
Why? People from C/C++ background know why assertions exist: after your code is tested, you are satisfied that parameters are always valid, and checks are eating eating CPU (sometimes you may need to squize every possible microsecond out of you code).
Example:
public class Scaler {
public Scaler(int scale) {
if (scale <= 0)
throw new IllegalArgumentException("scale<=0);
this.scale = scale;
}
private double scale(double val) {
assert scale>0; // did we check it?
return val / scale;
}
...
}
Cheers |