| // 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; |
| } |