2013-12-13 10 views
5

どうしてimport one.two.*import one.two.three.MyClassが含まれていますか? Javaにはimport one.two.**のようなものはありませんか?あるいは何らかの理由がありますか(彼らがしなかっただけでなく、できなかったことではありません)?Javaに「ディープ」ワイルドカードのインポートがないのはなぜですか?

ありがとう

+0

パッケージのレイヤーを1つも使用していない*私のIDEがそれらを入れているので正直であるが、クラスがより明確になった場所を作る –

答えて

8

Javaはパッケージを真に互いにサブクラス化するものとして扱いません。 java.utiljava.util.concurrencyは、2番目のように見えるかもしれませんが、最初は何とかしていますが、完全に独立したものとして扱われています。

これは、あなたのクラスまたはインターフェイスの名前を、後でいくつかのスーパーパッケージまたはサブパッケージで宣言されたものと同じ名前にすることを恐れる必要はないことを意味します。輸入の余分な行。

Peter Lawreyが説明したこの決定の背後にある理由は、Javaの一般的な単純化のほうにあります。とにかくインポートワイルドカードを使用しないことがベストプラクティスです。

4

Javaは各パッケージを独立して扱います。たとえば、ローカルのパッケージは、「サブ」パッケージには拡張されません。意味のあるやり方で階層を使うことは貴重だと思うが、Javaの設計はすべてをできるだけシンプルにすることだった。

何か理由はありますか(それ以外はしていないのですが、できなかったわけではありません)。

問題は古いプログラムを壊す可能性のある下位互換性です。私はこれが解決できると思う。

実際、ほとんどのIDEではインポートが管理されていますが、インポートしたものについてはそれ以上見ていません。すべてのクラスを明示的にインポートするには、確かにimport *を避けることが望ましいです。

関連する問題