| Javaプログラミング編 |
|
■ アノテーションを活用しよう!
JDK 1.4まではjava.langパッケージはインターフェイス、クラス、例外(クラス)、エラー(クラス)の4種類の要素から構成されていました。Java 5では、ここに列挙型として「Thread.State」、注釈タイプとして「Deprecated」「Override」「SuppressWarnings」の3つが追加されています。
本項では、これらの新要素の中からプログラミングでありがちなオーバライドのミスを撲滅する強力な効果を持つ「Override」を説明します。
注釈タイプは既存のJavaの文法との関連から「public @interface」という接頭語で表現されていますが、「Override」は「アノテーション型」と説明されており、前に「@」を付加してメソッドの前に定義することで、そのメソッドがオーバライドメソッドであることをコンパイラに通知できます。
よって、メソッドの前に「@Override」と記述することで、プログラムのミスによりオーバライドが成立していない場合には、コンパイラが通知してくれます。また、そのメソッドの作成者以外がプログラムを見たときに、それがオーバライドであることが一目瞭然、というメリットもあります。
■ オーバライドが成立しないプログラムミスをチェックする
一例として、プログラマのタイプミスにより、オーバライドしたはずのメソッドが呼ばれないという場合を示します。
![]() |
| 図1 税込会計のメソッドを呼んだはずなのに…… |
このプログラムは、Acount(会計)クラスをスーパークラスとするAcountWithTax(税込会計)クラスが、スーパークラスでは「単価×数量」であるcalcPrice(価格計算)メソッドを「単価×数量×税」としてオーバライドするという仕組みです。しかし、結果を見てのとおり、100円×5個の税込価格が500円、つまり無税になってしまっています。
すでにお気付きと思いますが、サブクラス(11行目)で「オーバライドしたつもり」のメソッド名が間違っている(calcPriceのはずがcalcPrise)のが原因です。よって、オーバライドが成立せず、19行目で呼ばれているのはスーパークラスから継承されたcalcPrice(価格計算)メソッドとなりますので、「100×5=500」が表示されてしまったわけです。
ここで、Eclipseをお使いで、使い慣れている方であれば、11行目にオーバライドのマークが出ていないことからタイプミスに気付きやすいと思いますが、そうでない場合や、巨大で複数のソースやパッケージにまたがるプログラムでは、コンパイルでエラーが出ないために、ミスの発見に時間がかかったり、最悪の場合、ミスを見逃してしまう危険性があります。
そこで、お勧めしたいのが「@Override」の付記です。このプログラムに「@Override」を付記してみましょう。
![]() |
| 図2 @Overrideを付記すると、エラー表示が |
見てのとおり、エラーが表示され、このエラー表示にマウスを載せると、下記のメッセージが得られます。
| 図3 オーバライドができていないことを教えてくれる(Eclipse) |
なお、javacコマンドの場合、下記のように違うメッセージが得られます。
![]() |
| 図4 オーバライドができていないことを教えてくれる(javac) |
ご参考までに修正後は以下のようになります。11行目にある▲がEclipseが表示してくれるオーバライドのマークです。
![]() |
| 図5 修正後、結果は正しく「525」になる |
Java 5では、Auto-BoxingやVarargsなどの導入で、プログラミングの自由度が上がった代わりに、オーバライドやオーバロードが分かりづらくなり、ミスを起こしやすくなっています。「@Override」の活用でオーバライドのミスを撲滅しましょう。
| 「Java TIPS」 |
TechTargetジャパン
- Scalaのパッケージ、アクセス修飾子、オブジェクト継承 (2012/5/22)
インポート、パッケージオブジェクト、抽象クラス/抽象メソッド、オーバーライド、final、シールドクラスなども - 基幹系システムでCloud SQLは使えるか試してみた (2012/5/17)
サンプルとしてMRPシステムを作成して動かし、「再帰呼び出し」などのパフォーマンスを測定して検証してみます - アジャイル管理ツール9選+Pivotal Tracker入門 (2012/5/14)
群雄割拠のアジャイルプロジェクト管理ツールを9つ紹介し、特に注目を集めているPivotal Trackerの基本的な使い方を解説します - サーバサイドJSやJavaでWebアプリが作れるXPages (2012/5/11)
Notes/Dominoの資産をサーバサイドJavaScriptやJavaで操作し、HTMLやJavaScript、CSSをUIにできる技術を紹介
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -




