新規作成クラスなのに「定義済みです」と言われるJavaTips 〜Eclipse編

» 2006年05月24日 10時00分 公開
[平野正喜@IT]

 Eclipseを用いて、パッケージ内に次々とクラスを作成して行く場合、間違って同じ名前のクラスを定義しないように、パッケージ・エクスプローラーに表示されるソースファイル名を確認しながら進めると便利です。

 しかし、パッケージ・エクスプローラーに表示されていないクラス名にも関わらず、定義すると「すでに定義されています」というエラーが表示される場合があります。

画面1 一覧になかったMasterPlanクラスを定義したらエラーが表示された 画面1 一覧になかったMasterPlanクラスを定義したらエラーが表示された

 このエラーの意味は、「定義済み」のクラスを見過ごして、同じ名前のクラスを同じパッケージに作成したということです。Javaではパッケージが異なる場合や、インナークラスや匿名クラスである場合を除いて、同じクラス名の存在は認められません。そこで、Eclipseではクラスの作成時にチェックをしてくれるわけです。

1つのソースファイルに複数のクラスを定義しているときに起こる

 どうして「定義済み」クラスを見過ごしてしまいやすいかというと、Javaでは1つのソースファイルに複数のクラスを定義できるからです。よって、Eclipseを用いてパッケージ内に次々とクラスを作成して行く場合は、パッケージ・エクスプローラーに表示されるソースファイル名を開いて、クラス名を確認しながら進めると良いでしょう。この場合、下図で見てのとおり、SalesPlan.javaファイルに、MasterPlanクラスが定義済みだったことがわかります。

画面2 ソースファイル名を開いて、含まれているクラスの名を確認 画面2 ソースファイル名を開いて、含まれているクラスの名を確認

 「定義済みです」と表示されたときは、残念ながら、どこに定義済みかは教えてもらえません。このとき、Eclipseのメニューにある[検索(A)]を用いると便利です。

画面3 検索機能により、MasterPlanクラスがある2つのファイルがわかる 画面3 検索機能により、MasterPlanクラスがある2つのファイルがわかる

 なお、この現象は、Eclipseにおけるプロジェクトの作成時に、他の人が作成した外部ソースからプロジェクトを作成した場合や、Eclipse以外で作成済みのソースを「ファイルシステムからのインポート」機能で読み込んだ場合に起こることがあります。外部から取り込んだソースから順にチェックすると良いでしょう。

実は見過ごされていることの方が多いので注意

 実は、Eclipseを用いずにエディタとjavacコマンドで複数のソースファイルを作成・コンパイルしている場合、上記のようなミスをしても気が付きません。定義済みであった場合も、無条件に上書きされてしまうのです。

 もちろん、この状態が見過ごされていることは、最悪の場合、再構築時などに大きなトラブルを起こしかねませんので、非常に危険です。Eclipseを活用するなどして、チェックしておきましょう。

Profile

RunDog.org

平野正喜


Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。