うーん、わかるようなわからんような。 interface I {} class A implements I, Comparable<I> {...} class B implements I, Comparable<I> {...} static <T extends Comparalbe<? super T>> int compare1(T a, T b) {...} static <T extends Comparalbe<T>> int compare2(T a, T b) {...} void func() { A a = new A(); B b = new B(); compare1(a, b); // OK compare2(a, b); // NG } 既存の定義はなんとか読み解けても、1から自分で定義できなさそーな気が……。