Duplicate :
|
The compiler fails to reject this program: import java.lang.annotation.Annotation; import java.lang.reflect.Constructor; public class X { void bar(Constructor constructor, Class<Ann> ann) { constructor.getAnnotation(ann).message(); // Should fail } } @interface Ann { String message(); } class Y { void bar(MyConstructor constructor, Class<Ann> ann) { constructor.getAnnotation(ann).message(); // Should fail } } interface Z { <T extends Annotation> T getAnnotation(Class<T> c); } class MyAccessibleObject implements Z { public <T extends Annotation> T getAnnotation(Class<T> c) { return null; } } class MyConstructor<V> extends MyAccessibleObject { public <T extends Annotation> T getAnnotation(Class<T> c) { return null; } }