Javaで古いソースコードの改修をするときにジェネリクスを使っていないraw型のコレクションを取り扱わなければいけない時がある。
まるごとリファクタリングできればいいんだけど、外部ライブラリになっていていじれない場合は警告を抑制する必要がある。
例えば、以下のようにraw型のListを返してくるメソッドがあったとしよう。
List getList()
これを使って以下のようなコードを書くと
これを防ぐためにはSuppressWarningsアノテーションをつける。
今回の場合は無検査変換なので"uncheked"。
そこで以下のようなラッパーメソッドを用意する。
まるごとリファクタリングできればいいんだけど、外部ライブラリになっていていじれない場合は警告を抑制する必要がある。
例えば、以下のように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箇所で済む。
0 件のコメント:
コメントを投稿