Unchecked cast警告が出たら普通は以下のようにinstanceofで型チェックしてからCastするよう修正する。
if (obj instanceof String) {
return (String) obj;
}
でも型パラメータはコンパイル後に消えるのでinstanceofで厳密に型チェックできない
if (obj instanceof List<String>) { // これはコンパイルエラーになる。List<?>ならコンパイル通るけど、それではList型であることしかわからないので、必ずしもList<String>にCast出来ないのであんまり意味ない
return (List<String>) obj;
}
なので @SuppressWarnings("unchecked") をメソッドに付けて警告を抑止するしかない。
コンパイル後も型パラメータを残して欲しかったなぁ。。
参考:
http://www.ibm.com/developerworks/jp/java/library/j-jtp01255/#4.0