私は最近 Eclipse IDE の使用を開始し、デフォルト (src) パッケージを使用して新しいパッケージを作成してはならないことを多くの場所で読みました。
この背後にある理由を知りたかっただけです。
6 に答える
デフォルトのパッケージを使用すると、名前空間の競合が発生する場合があります。MyClass
クラスを含むライブラリを作成していると想像してください。誰かが自分のプロジェクトであなたのライブラリを使用MyClass
し、デフォルト パッケージにもクラスを持っています。コンパイラは何をすべきか? Java のパッケージは、実際にはプロジェクトを完全に識別する名前空間です。そのため、実際のプロジェクトではデフォルト パッケージを使用しないことが重要です。
当初は、異なる Java コード間で衝突が発生しないようにするための手段として意図されていました。
Java はどこでも、ネット上で実行されることを意図していたので (つまり、Sun、IBM、または Joe Bloggs や Dodgy Software Company Pty Ltd からビットを取得する可能性があることを意味します)、私が所有していたという事実paxdiablo.com
(実際にはありませんが、この答えのために私がするふりをする)は、私のすべてのコードcom.paxdiablo.blah.blah.blah
を安全に呼び出すことができ、他の人に干渉しないことを意味しました。
プログラムはパッケージのセットとして編成されます。各パッケージには、名前の競合を防ぐのに役立つ、型の独自の名前のセットがあります。
私は通常、デフォルトのパッケージを使用することから始めて、実際のパッケージに移動するだけです (Eclipse IDE で行うのはかなり簡単です)。
Java は、クラスを区別する方法としてパッケージを使用します。パッケージを使用すると、org.example.Something クラスと org.example.extended.Something クラスを持つことができ、両方とも Something という名前であっても、それらを区別できます。パッケージが異なるため、同じプロジェクトで両方を使用できます。
パッケージを宣言することにより、独自の名前空間 (クラス用) を定義します。このように、異なるパッケージ名 (名前空間) を使用する 2 つの同一のクラスがある場合、どちらを使用するかが区別されます。
私が考えることができる主な理由は次のとおりです。
- クラスや機能を探す場所を知るのに役立ちます。
- 異なるパッケージにある場合は、同じ名前のクラスを定義できます。
- デフォルト パッケージの Classes/etc は、名前付きパッケージにインポートできません。これは、あなたのクラスを使用するために、他の人もすべてのクラスをデフォルト パッケージに入れる必要があることを意味します。これは、理由 1 と 2 が解決する問題を悪化させます。
Javaの観点からは、antを使用してビルドおよびデプロイするか、Mavenライフサイクルのいずれかを使用して、従うことができる2つの一般的な開発/デプロイライフサイクルがあります。これらのライフサイクルは両方とも、ローカルディレクトリ、およびmavenの場合は、ローカルまたはネット上の定義済みリポジトリでソースコードとリソースを検索します。
重要なのは、プロジェクトをセットアップするときに、開発と最終的には展開のために、移植性があり、IDEに依存しないプロジェクト構造を構築する必要があるということです。プロジェクトは、いずれかのビルド環境を使用してビルドおよびデプロイできます。クラス変数やコンパイルパスなどを提供するためにEclipseフレームワークに大きく依存している場合、プロジェクトはそのconfigurationjを使用してのみビルドおよびデプロイされ、別の開発者環境に移植できないという問題が発生する可能性があります。いわば。