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.Map
は java.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は難しい。
回答編が書けるかな?