public static void main(String[] argv) { O o = new X(); I i = o.getI(); i.m(); }
<X extends I<Object, X>, Y extends I<Object, Y>> void test(I<Object, X> x, I<Object, Y> y) { x.<Y>m(y); x.m(y); y.<X>m(x); y.m(x); }