Javaでのraw型の警告対処

2015年6月1日月曜日

Java ジェネリクス

Javaで古いソースコードの改修をするときにジェネリクスを使っていないraw型のコレクションを取り扱わなければいけない時がある。
まるごとリファクタリングできればいいんだけど、外部ライブラリになっていていじれない場合は警告を抑制する必要がある。

例えば、以下のようにraw型のListを返してくるメソッドがあったとしよう。
List getList()

これを使って以下のようなコードを書くと
List<String> ls = getList();
このメソッドを使おうとするとコンパイラによって警告が出力される。

警告: [unchecked] 無検査変換

これを防ぐためにはSuppressWarningsアノテーションをつける。
今回の場合は無検査変換なので"uncheked"。

@SuppressWarnings("unchecked")
List<String> s = getList();
アノテーションは変数宣言やメソッドなどにつけることができるけど、getListメソッドを呼ぶ度につけるのはめんどうだし、見た目も良くない。

そこで以下のようなラッパーメソッドを用意する。

@SuppressWarnings("unchecked")
public <T> List<T> getTypedList() {
    return legacyObj.getList();
}
これでSuppressWarningsを書くのは1箇所で済む。