Genericsの話 ー 問題編 ー

最近は色々と忙しくブログを書く時間がないです。だいぶ空いてしまいました。
さて、とりあえずネタを投下だけして調査は後日・・・なわけですが、以下のコードがコンパイル通りません。

public class Test {
    public static interface If<E> {
    }
    public static<K extends If<V>, V> java.util.Map<K, V> map() {
          return new java.util.HashMap<K, V>();
    }
    public static void main(String[] args) {
        java.util.Map<If<Integer>, Integer> map= Test.map();
    }
}

Test.java:8: 互換性のない型; 型変数 K,V のインスタンスが存在しないので、java.util.Mapjava.util.Map,java.lang.Integer> に適合しません。
検出値 : java.util.Map
期待値 : java.util.Map,java.lang.Integer>
java.util.Map, Integer> map= Test.map();
^

正確に言えば、Eclipseではコンパイルエラーにならないんですが、javacだとコンパイルエラーになります。
mapメソッドへの型情報の渡し方がポイントなのですが、「extends If」がうまく渡らないようで・・・

なんだかんだとGenericsは難しい。
回答編が書けるかな?