Inconsistently ordered parameters in method overloads can be very confusing to the users. For example, the following overloads are considered to be consistent:
public void foo(Bar bar, Baz baz) { ... }
public void foo(Bar bar, Baz baz, int x) { ... }
However, these are not consistent:
public void foo(Bar bar, Baz baz) { ... }
public void foo(Bar bar, int x, Baz baz) { ... }
Having inconsistent parameters not only makes the code more confusing and puts additional burden on the user, but can also lead to very serious bugs. Consider the following overloaded methods:
public void foo(Bar bar, String suffix) { ... }
public void foo(Bar bar, String prefix, String suffix) { ... }
If the caller has a code like foo(bar, "quux") and wants to add custom prefix
support they will most likely do it like foo(bar, "quux", "norf"). The
compiler will accept this because the types match perfectly. However, this is
clearly a bug caused by unintuitive API and method overloading.
Suppress false positives by adding the suppression annotation @SuppressWarnings("InconsistentOverloads") to the enclosing element.