Java7の複数例外catchを調べてみた
もうリリース間近なJava7。Java7ではProject Coinと呼ばれる、様々な言語仕様についての改善が含まれています。
そのなかでも特に気になった複数例外のマルチキャッチについて、OpenJDKを使って、ちょっと調べてみました。
複数例外catchとは?
Java7では複数例外catchを簡単に記述することが出来ます。今までだと
try { ... } catch(IOException e) { //IOException時の処理 } catch(ClassNotFoundException e) { //ClassNotFoundException時の処理 }
としていたのを
try { ... } catch(IOException | ClassNotFoundException e) { //IOException or ClassNotFoundException時の処理 }
という形式で、一度に記述することが出来ます。
catch内でIOExceptionかClassNotFoundExceptionかを判別したい場合は、instanceofを使って
try { ... } catch(IOException | ClassNotFoundException e) { if(e instanceof IOException) { //IOException時の処理 } if(e instanceof ClassNotFoundException) { //ClassNotFoundException時の処理 } }
としてやることで判別可能です。*1また、キャストすることで、元のクラスのメソッドを呼び出すことも可能です。
注意点
注意点が1点だけ。
- あるExceptionと、そのサブクラスを、複数例外catchでは記述できない
ということです。例えば以下のパターン
try { ... } catch(IOException | FileNotFoundException e) { ... }
この場合、FileNotFoundExceptionはIOExceptionのサブクラスなので、上記のように書くと、コンパイルエラーとなります。
*1:それならcatchを分けろって声が聞こえそうですが