package p; public class Test<T extends Test<T>> { /** * @param test * @param t */ public static <T extends Test<T>> void foo(Test<T> test, T t) { test.foo(t); } void foo(T t) { } void f(T t) { Test.foo(t, null); } }