// Additional test case for issue #511: // https://github.com/typetools/checker-framework/issues/511 class MyGeneric<T extends Number> {} class MySuperClass { public void method(MyGeneric<? extends Object> x) {} } public class Issue511 extends MySuperClass { @Override public void method(MyGeneric<?> x) { super.method(x); } // public void method(MyGeneric<? extends Number> x) {} // On the above method, javac issues the following error: // Issue511.java:19: error: name clash: method(MyGeneric<? extends Number>) in Issue511 and method(MyGeneric<? extends Object>) in MySuperClass have the same erasure, yet neither overrides the other // public void method(MyGeneric<? extends Number> x) {} // ^ // 1 error } class Use { MyGeneric<? extends Object> wildCardExtendsObject = new MyGeneric<>(); MyGeneric<? extends Number> wildCardExtendsNumber = wildCardExtendsObject; MyGeneric<?> wildCardNoBound = new MyGeneric<>(); MyGeneric<? extends Number> wildCardExtendsNumber2 = wildCardNoBound; }