| Eclipse編 |
|
Eclipseを用いて、パッケージ内に次々とクラスを作成して行く場合、間違って同じ名前のクラスを定義しないように、パッケージ・エクスプローラーに表示されるソースファイル名を確認しながら進めると便利です。
しかし、パッケージ・エクスプローラーに表示されていないクラス名にも関わらず、定義すると「すでに定義されています」というエラーが表示される場合があります。
![]() |
| 画面1 一覧になかったMasterPlanクラスを定義したらエラーが表示された |
このエラーの意味は、「定義済み」のクラスを見過ごして、同じ名前のクラスを同じパッケージに作成したということです。Javaではパッケージが異なる場合や、インナークラスや匿名クラスである場合を除いて、同じクラス名の存在は認められません。そこで、Eclipseではクラスの作成時にチェックをしてくれるわけです。
■1つのソースファイルに複数のクラスを定義しているときに起こる
どうして「定義済み」クラスを見過ごしてしまいやすいかというと、Javaでは1つのソースファイルに複数のクラスを定義できるからです。よって、Eclipseを用いてパッケージ内に次々とクラスを作成して行く場合は、パッケージ・エクスプローラーに表示されるソースファイル名を開いて、クラス名を確認しながら進めると良いでしょう。この場合、下図で見てのとおり、SalesPlan.javaファイルに、MasterPlanクラスが定義済みだったことがわかります。
![]() |
| 画面2 ソースファイル名を開いて、含まれているクラスの名を確認 |
「定義済みです」と表示されたときは、残念ながら、どこに定義済みかは教えてもらえません。このとき、Eclipseのメニューにある[検索(A)]を用いると便利です。
![]() |
| 画面3 検索機能により、MasterPlanクラスがある2つのファイルがわかる |
なお、この現象は、Eclipseにおけるプロジェクトの作成時に、他の人が作成した外部ソースからプロジェクトを作成した場合や、Eclipse以外で作成済みのソースを「ファイルシステムからのインポート」機能で読み込んだ場合に起こることがあります。外部から取り込んだソースから順にチェックすると良いでしょう。
■実は見過ごされていることの方が多いので注意
実は、Eclipseを用いずにエディタとjavacコマンドで複数のソースファイルを作成・コンパイルしている場合、上記のようなミスをしても気が付きません。定義済みであった場合も、無条件に上書きされてしまうのです。
もちろん、この状態が見過ごされていることは、最悪の場合、再構築時などに大きなトラブルを起こしかねませんので、非常に危険です。Eclipseを活用するなどして、チェックしておきましょう。
| 「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 -



