Community
Participate
Working Groups
I20050811-1530 class A<T extends Number> { void m(T t) { System.out.println("A: " + t); } } class B<S extends Integer> extends A<S> { @Override void m(S t) { System.out.println("B: " + t); } } class D extends B<Integer> { // @Override correctly rejected, but declaration wrongly accepted: void m(Number t) { System.out.println("D#m(Number): " + t); } @Override void m(Integer t) { System.out.println("D#m(Integer): " + t); } } public class Test { public static void main(String[] args) { D d= new D(); d.m(1); d.m(1.1); // should not compile A<Integer> ai= d; ai.m(2); A araw= d; araw.m(3); araw.m(3.1); // should CCE @ run time } } javac 1.5.0_04: name clash: m(java.lang.Number) in override.test2.D and m(T) in override.test2.A<java.lang.Integer> have the same erasure, yet neither overrides the other class D extends B<Integer> { ^
Added MethodVerify test71 & released into HEAD.
forgot to tag it as fixed
Also released fix into 3.1.2 stream
Verified for 3.1.2 using build M20060109-1200.
Verified for 3.2 M4 using build I20051215-1506.