Genericsについての質問です。
import java.util.*;
public class Ex1 {
   public static void main(String[] args) {
      Map<String,Object> map = new HashMap<String,Object>();
      map.put("key1", "FOO");
      map.put("key2", new Integer(123));
      map.put("key3", new ArrayList<String>());
      String val1 = (String)map.get("key1");
      int val2 = (Integer)map.get("key2");
      List<String> val3 = (List<String>)map.get("key3"); // warning: unchecked cast
   }
}
これをコンパイルするとこんなwarningが出ます。
Ex1.java:10: warning: [unchecked] unchecked cast
found : java.lang.Object
required: java.util.List<java.lang.String>
List<String> val3 = (List<String>)map.get("key3");
^
1 warning
なぜでしょうか。StringやIntegerだとキャストできて、List<>だとできないのが謎です。