日々精進

新しく学んだことを書き留めていきます

型パラメータを含むCastで「Type safety: Unchecked cast from」警告が出たら抑止する

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