File: InconsistentOverloads.md

package info (click to toggle)
error-prone-java 2.18.0-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, forky, sid, trixie
  • size: 23,204 kB
  • sloc: java: 222,992; xml: 1,319; sh: 25; makefile: 7
file content (28 lines) | stat: -rw-r--r-- 1,018 bytes parent folder | download
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.