SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Eclipse 3.4からはじめるIDE入門

Eclipse 3.4のコード生成&リファクタリング機能(続)~Eclipse 3.4入門~

第9回


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));を選択状態にします。

図18:囲みたい行を選択
図18:図18:囲みたい行を選択

 メニューの[ソース(S)]‐[囲む(W)]‐[try/catchブロック(Y)]を実行します。なお、下の[6 try (try catch block)]でも例外処理ブロックを生成できますが、囲まれるコードの内容を解析しません。

図19:[ソース]‐[囲む]‐[try/catchブロック]を実行
図19:[ソース]‐[囲む]‐[try/catchブロック]を実行

 try/catchブロックが生成されます。選択した行に含まれるメソッドのうち、Integer.parseInt(String)メソッドがNumberFormatExceptionthrowすることが認識されて、対応するcatch句が自動的に生成されています。

図20:try/catchブロックが生成される
図20:try/catchブロックが生成される

 あとは、自動生成されたcatch部の内容e.printStackTrace();を、処理内容に合わせて書き換えればよいでしょう。

メソッド・シグニチャーの変更

 メソッドの名前、引数の型と数、戻り値の型を列記したメソッド・シグニチャーは、メソッドの外形の定義であり、オブジェクト指向の多態性(ポリフォニズム)を実現する基礎になっています。孤立したクラスにあるメソッドのシグニチャーを修正するのは簡単ですが、継承関係があり、サブクラスでこのメソッドをオーバライドしている場合などはトラブルを起こすことがあります。Eclipseのリファクタリング機能の1つである「メソッド・シグニチャーの変更」を利用することで、トラブルを回避できます。

 HelloStaffクラスのkyufukin()メソッドを用いて試してみましょう。この抽象メソッドはサブクラスのHelloEmpクラスでオーバライドしていますので、もし、単独でシグニチャーを変更すると文法エラーが発生します。例えば、戻り値の型をintからshortに変更すると、HelloEmpクラスのkyufukin()メソッドが文法エラーになってしまいます。

図21:HelloStaffクラスのkyufukin()メソッドの戻り値の型をintからshortに変更すると、HelloEmpクラスのkyufukin()メソッドが文法エラーになる
図21:HelloStaffクラスのkyufukin()メソッドの戻り値の型をintからshortに変更すると、HelloEmpクラスのkyufukin()メソッドが文法エラーになる

 では、メソッド・シグニチャーの変更機能を利用しましょう。HelloStaffクラスのkyufukin()メソッドの戻り値の型をintに戻して保存してから、ソースエディタまたはパッケージエクスプローラでこのメソッドを選択状態にします。

図22:HelloStaffクラスのkyufukin()メソッドの戻り値の型をintに戻して選択状態にする
図22:HelloStaffクラスのkyufukin()メソッドの戻り値の型ををintに戻して選択状態にする

 メニューの[リファクタリング(T)]‐[メソッド・シグニチャーの変更(C)]を実行します。

図23:[リファクタリング]‐[メソッド・シグニチャーの変更]を実行
図23:[リファクタリング]‐[メソッド・シグニチャーの変更]を実行

 「メソッド・シグニチャーの変更」ウィンドウが表示されます。今回は「戻り値の型」をshortに書き換えて[プレビュー(W)]をクリックします。なお、アクセス修飾子やメソッド名、パラメータ、throws句に指定する例外も変更できます。また、変更されたメソッドへの委譲として元のメソッドを保持することもでき、この場合、そのメソッドを非推奨とするかどうかを選択できます。

図24:「戻り値の型」を「short」に書き換えて[プレビュー]をクリック
図24:「戻り値の型」を「short」に書き換えて[プレビュー]をクリック

 すると、プレビュー画面に切り替わります。今回の場合、スーパークラスとサブクラスのそれぞれに変更が加わるので、[実行される変更]で1つずつ確認しましょう。まず、サブクラスであるHelloEmpkyuhukin()メソッドのシグニチャーが変更されることが分かります。

図25:サブクラスの変更を確認
図25:サブクラスの変更を確認

 次に、[実行される変更]でスーパークラスであるHelloStaff.javaをクリックします。kyuhukin()メソッドのシグニチャーが変更されることがわかります。確認できたら[OK]をクリックして変更を実行します。

図26:スーパークラスの変更を確認して[OK]をクリック
図26:スーパークラスの変更を確認して[OK]をクリック

 エディタービューに戻るので、プレビューの通りに2つのクラスが変更されていることを確認します。

 このように、メソッド・シグニチャーの変更機能は、変更に伴って行うべき作業のモレを防ぐことができ、変更に伴う影響の調査や、変更されたメソッドへの委譲として元のメソッドを保持するかどうかの検討にも有効です。

次のページ
フィールドのカプセル化

修正履歴

この記事は参考になりましたか?

Eclipse 3.4からはじめるIDE入門連載記事一覧

もっと読む

この記事の著者

平野正喜@ランドッグ・オーグ(ヒラノマサキ)

フリーのIT系執筆者&講使(※)の「ランドッグのマウ」こと平野正喜(HIRANO Masaki)です。【略歴】 1962年札幌市生まれ。今で言うIT企業のシステムエンジニア、プロジェクトリーダー、システムコンサルタント、採用担当などを経て独立し、2002年11月にランドッグ・オーグ平野正喜事務所(h...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/4088 2010/05/14 15:34

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー