> What I propose (as an alternative the "simple" policy) above is to create > a "NullArgumentException" that inherits from "MathIllegalArgumentException". > This exception will be thrown whenever a null check fails (i.e. "null is an > illegal argument"). To be consistent, we should never throw NPE from CM.
I'm converting all current uses of the "createIllegalArgument" over to throwing "NullArgumentException". While at that, I noticed there is another kind of inconsistency when dealing with method arguments. In code like ---CUT--- if (den == 0) { throw MathRuntimeException.createArithmeticException( LocalizedFormats.ZERO_DENOMINATOR_IN_FRACTION, num, den); } ---CUT--- One should throw a "ZeroException" (subclass of "IllegalArgumentException"), instead of an "ArithmeticException", to folow the rationale that we settled on (of throwing IAE instead of NPE for null arguments). On another front, the separation between "general" and "specific" error message patterns can save some more enums like in the above example (in the "Fraction" class) where the modified code would look like: ---CUT--- if (den == 0) { throw new ZeroException(LocalizedFormats.DENOMINATOR); } ---CUT--- [Propagating the numerator is not relevant. Otherwise, where do you stop in providing "context"? For every method you could consider that the whole parameter list must be part of the detailed message...] And, for the numerator check, we would have the equivalent: ---CUT--- if (num == 0) { throw new ZeroException(LocalizedFormats.NUMERATOR); } ---CUT--- Gilles --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org For additional commands, e-mail: dev-h...@commons.apache.org