public class GenericArg<X> { void mp(X p) { @X Object l; } X mr() { @X Object r; return null; } <Y extends Number> void foo(Y p) { @X Object k; } <Z extends Integer> Z bar() { @X Integer j; return null; } class Tricky { void argh(X p) { @X Object a; } } }