## Why is this an issue?

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.

### Noncompliant code example

     public void setPrice(int price) {
      assert price >= 0 && price <= MAX_PRICE;
      // Set the price
     }

### Compliant solution

     public void setPrice(int price) {
      if (price < 0 || price > MAX_PRICE) {
        throw new IllegalArgumentException("Invalid price: " + price);
      }
      // Set the price
     }

## Resources

Programming With Assertions