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