Javaでよく使うユーティリティ(その1)
今回は色んなプロジェクトにおいてよく使うユーティリティについて。
ちょっとしたことだけど、あると便利!みたいなのを紹介します。
(1) コードが煩雑になるのを防ぐ方法
ファイル処理とか、色んな場面でやると思います。
その場合、基本的にはfinallyでclose()処理を実行すると思いますが
そこでIOExceptionとか発生するとfinally内でcatchしないといけなかったり・・・結構面倒ですよね。
finallyでcatchする場合なんてほとんど復旧処理とかしないと思います。
そういった場合に便利なユーティリティです。
◆ユーティリティを使用しない場合
BufferedReader br = null; InputStream in = null; try{ in = Main.class.getResourceAsStream("/test.properties"); br = new BufferedReader(new InputStreamReader(in)); } finally{ try{ br.close(); } catch (IOException e) { // どうせ何も出来ないので復旧なし } }
※finally句でtry 〜catchするのが無駄だけど、してないとコンパイルが通らない。。
◆ユーティリティを使用した場合
public static void closeResource(Closeable resource){ if(resource !=null){ try { resource.close(); } catch (IOException e) { // 復旧なし } } BufferedReader br = null; InputStream in = null; try{ in = Main.class.getResourceAsStream("/test.properties"); br = new BufferedReader(new InputStreamReader(in)); } finally{ closeResource(br); }
※finally句にtry 〜catchを記述しなくていいので、すっきりします。(代わりにapache-commonsのIOUtils.closeQuietly()を使用しても似たようなことが出来ますが。)
(2) 面倒なWarningを消す方法
私がよく直面する場面として、Listのキャスト時にWarningが出るってのがあります。
「型Listの式は、未検査の型変換をしようして・・・」ってやつですね。
これは確かにWarningで指摘される通りなんだけど、プログラマからすると
当然List型が取れるのにWarningが出るのが邪魔くさかったりします。
そのWarningをとるためのユーティリティを紹介します。
◆ユーティリティを使用しない場合
Map<String,Object> map = new HashMap<String, Object>(); map.put("list", new ArrayList<String>()); List<String> list = (List)map.get("list");
※最後の行で「型Listの式は、未検査の型変換をしようして・・・」というWarningが出ます。
◆ユーティリティを使用した場合
@SuppressWarnings("unchecked") public static <T> T nonWarnCast(Object target){ return (T) target; } Map<String,Object> map = new HashMap<String, Object>(); map.put("list", new ArrayList<String>()); List<String> list = nonWarnCast(map.get("list"));
※「@SuppressWarnings("unchecked")」が効いているので、最後の行ではWarningは出ません。
今回はちょっとしたものだけど、よく使うユーティリティを紹介しました。
次回はもうちょっと便利なユーティリティについて紹介したいと思います。