An assert
is inappropriate for parameter validation because assertions can be disabled at runtime in the JVM, meaning that a bad
operational setting would completely eliminate the intended checks. Further, assert
s that fail throw AssertionError
s, rather
than throwing some type of Exception
. Throwing Error
s is completely outside of the normal realm of expected
catch
/throw
behavior in normal programs.
This rule raises an issue when a public
method uses one or more of its parameters with assert
s.
public void setPrice(int price) { assert price >= 0 && price <= MAX_PRICE; // Set the price }
public void setPrice(int price) { if (price < 0 || price > MAX_PRICE) { throw new IllegalArgumentException("Invalid price: " + price); } // Set the price }