interface I { void foo(Y<String>.Z z, int x); } public class X { public static void main(String [] args) { I i = Y<String>.@Marker Z::foo; i.foo(new Y<String>().new Z(), 10); Zork z; } } class Y<T> { class Z { void foo(int x) { System.out.println(x); } } }