try/catchブロックで「囲む」機能
Eclipseは「囲む」機能として、既存のコードを包むブロックを作成する仕掛けを提供しています。do、for、if、runnable、sychronized、try、whileの7種で、テンプレートを構成することにより作成するブロックの書式をカスタマイズできます。そして、この7種に加えて、囲まれるコードの内容を解析して最適な例外処理ブロックを生成してくれる「囲む - try/catchブロック」機能があります。Javaの例外定義のうち、RuntimeExceptionとそのサブクラスについては、記述するかどうかは自由ですので、後から必要に応じて追加する場合に便利です。
ではまず、この機能を試すためのメソッドをHelloStaffクラスに書き加えます。今回は、setterのオーバロードとして、下記を挿入するとします。これは文字列で年齢が与えられ場合に、整数化してオーバロードしている他のsetterに渡すメソッドです。
public void setAge(String ages) {
setAge(Integer.parseInt(ages));
}
このメソッドは整数化できない文字列が与えられた場合に例外が発生します。そこで、「囲む‐try/catchブロック」機能で適切な例外処理ブロックを生成しましょう。ソースエディタでこのメソッドのsetAge(Integer.parseInt(ages));を選択状態にします。
メニューの[ソース(S)]‐[囲む(W)]‐[try/catchブロック(Y)]を実行します。なお、下の[6 try (try catch block)]でも例外処理ブロックを生成できますが、囲まれるコードの内容を解析しません。
try/catchブロックが生成されます。選択した行に含まれるメソッドのうち、Integer.parseInt(String)メソッドがNumberFormatExceptionをthrowすることが認識されて、対応するcatch句が自動的に生成されています。
あとは、自動生成されたcatch部の内容e.printStackTrace();を、処理内容に合わせて書き換えればよいでしょう。
メソッド・シグニチャーの変更
メソッドの名前、引数の型と数、戻り値の型を列記したメソッド・シグニチャーは、メソッドの外形の定義であり、オブジェクト指向の多態性(ポリフォニズム)を実現する基礎になっています。孤立したクラスにあるメソッドのシグニチャーを修正するのは簡単ですが、継承関係があり、サブクラスでこのメソッドをオーバライドしている場合などはトラブルを起こすことがあります。Eclipseのリファクタリング機能の1つである「メソッド・シグニチャーの変更」を利用することで、トラブルを回避できます。
HelloStaffクラスのkyufukin()メソッドを用いて試してみましょう。この抽象メソッドはサブクラスのHelloEmpクラスでオーバライドしていますので、もし、単独でシグニチャーを変更すると文法エラーが発生します。例えば、戻り値の型をintからshortに変更すると、HelloEmpクラスのkyufukin()メソッドが文法エラーになってしまいます。
では、メソッド・シグニチャーの変更機能を利用しましょう。HelloStaffクラスのkyufukin()メソッドの戻り値の型をintに戻して保存してから、ソースエディタまたはパッケージエクスプローラでこのメソッドを選択状態にします。
メニューの[リファクタリング(T)]‐[メソッド・シグニチャーの変更(C)]を実行します。
「メソッド・シグニチャーの変更」ウィンドウが表示されます。今回は「戻り値の型」をshortに書き換えて[プレビュー(W)]をクリックします。なお、アクセス修飾子やメソッド名、パラメータ、throws句に指定する例外も変更できます。また、変更されたメソッドへの委譲として元のメソッドを保持することもでき、この場合、そのメソッドを非推奨とするかどうかを選択できます。
すると、プレビュー画面に切り替わります。今回の場合、スーパークラスとサブクラスのそれぞれに変更が加わるので、[実行される変更]で1つずつ確認しましょう。まず、サブクラスであるHelloEmpのkyuhukin()メソッドのシグニチャーが変更されることが分かります。
次に、[実行される変更]でスーパークラスであるHelloStaff.javaをクリックします。kyuhukin()メソッドのシグニチャーが変更されることがわかります。確認できたら[OK]をクリックして変更を実行します。
エディタービューに戻るので、プレビューの通りに2つのクラスが変更されていることを確認します。
このように、メソッド・シグニチャーの変更機能は、変更に伴って行うべき作業のモレを防ぐことができ、変更に伴う影響の調査や、変更されたメソッドへの委譲として元のメソッドを保持するかどうかの検討にも有効です。


![図19:[ソース]‐[囲む]‐[try/catchブロック]を実行](http://cz-cdn.shoeisha.jp/static/images/article/4088/9-19s.gif)



![図23:[リファクタリング]‐[メソッド・シグニチャーの変更]を実行](http://cz-cdn.shoeisha.jp/static/images/article/4088/9-23s.gif)
![図24:「戻り値の型」を「short」に書き換えて[プレビュー]をクリック](http://cz-cdn.shoeisha.jp/static/images/article/4088/9-24s.gif)

![図26:スーパークラスの変更を確認して[OK]をクリック](http://cz-cdn.shoeisha.jp/static/images/article/4088/9-26s.gif)