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は出ません。


今回はちょっとしたものだけど、よく使うユーティリティを紹介しました。
次回はもうちょっと便利なユーティリティについて紹介したいと思います。