It bugged the hell out of me that that one vaguely-worded bullet point in the Generic Methods section of the JLS was so murky to me.
But after rereading and rereading both older and more recent versions of it, I eventually figured out that what that cryptic bullet point is most likely talking about is what's known in lambda calculus as „alpha renaming“; or α-conversion:
„…α-conversion, sometimes known as α-renaming, allows bound variable names to be changed. For example, α-conversion of λx.x might yield λy.y. Terms that differ only by α-conversion are called α-equivalent. Frequently, in uses of lambda calculus, α-equivalent terms are considered to be equivalent…“
So taking this:
Where A1, ..., An are the type parameters of M and B1,
..., Bn are the type parameters of N,
let θ=[B1:=A1, ..., Bn:=An].
Then, for all i (1 ≤ i ≤ n), the bound of
Ai is the same type as θ applied to the bound of
Bi.
And taking this method as M:
<T, U, V extends T> void m(){ }
And this method as N:
<U, T, V extends T> void m(){ }
Then „renaming each occurrence of a Bi in N's type to Ai” means applying that θ function to each type parameter; with each corresponding i position in lock-step order with each other.
The thing that helped me grok the θ function of 8.4.4 the most, is that the ordinal position of the type parameters is super, super significant in the application of that θ function.
What happens when that θ function is applied to the upper bound of B3 is that extends T must be similarly α-renamed to extends U in order for the type parameter of the upper bound to be in sync with what it was renamed to at index 2:
+------------------------------+
¦ 1 ¦ 2 ¦ 3 ¦
+---------+---------+---------+----------+------------+
| M | T | U | V | extends T |
+---------+---------+---------+----------+------------¦
| N | U | T | V | extends T |
+---------+---------+---------+----------+------------¦
| θ | T | U | V | extends U |
+-----------------------------------------------------+
The upshot being: the signatures of the example methods M and N are not the same. Yes they have the same name (m). And yes they have the same number of type parameters. Even their type parameters have been renamed to be the same and are in the same order. But the kicker is their corresponding type parameters at index 3 have different upper bounds.
So that's what the JLS means by „for all i (1 ≤ i≤n), the bound of Ai is the same type as θ applied to the bound of Bi“. Remember you heard it here first ;)