1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
|
Inconsistently ordered parameters in method overloads can be very confusing to
the users. For example, the following overloads are considered to be consistent:
```java
public void foo(Bar bar, Baz baz) { ... }
public void foo(Bar bar, Baz baz, int x) { ... }
```
However, these are not consistent:
```java
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:
```java
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.
|