2

論理的な質問があります: Java のすべてのパッケージからすべてのパッケージをインポートできないのはなぜですか? たとえば、java.awt からすべてのクラスをインポートできます。

import java.awt.*;

ただし、次のことはできません。

import java.awt.*.*;

私の目的は、awt.image と awt.event などからすべてのものをインポートすることです。これを行う別の方法はありますか?

ありがとうございました!

4

3 に答える 3

3

import a.package.*.*;Java でを実現する方法はありません。JLS のセクション 7.5では、合法的なインポートの種類を 4 つだけ指定しています。

single-type-import 宣言 (§7.5.1) は、正規名 (§6.7) に言及することによって、単一の名前付き型をインポートします。

例えばimport java.util.List;

タイプ インポート オン デマンド宣言 (§7.5.2) は、タイプまたはパッケージの正規名に言及することにより、必要に応じて名前付きタイプまたは名前付きパッケージのすべてのアクセス可能なタイプ (§6.6) をインポートします。

例えばimport java.awt.*;

single-static-import 宣言 (§7.5.3) は、正規名を指定することにより、指定された名前を持つすべてのアクセス可能な静的メンバーを型からインポートします。

例えばimport static org.junit.Assert.assertEquals;

static-import-on-demand 宣言 (§7.5.4) は、型の正規名を指定することにより、必要に応じて名前付き型のアクセス可能なすべての静的メンバーをインポートします。

例えばimport static org.junit.Assert.*;

パッケージでは、同じ名前のクラスを個別に参照できます。たとえば、 と がjava.awt.Listありjava.util.Listます。誰かがすべてをインポートするのを止めるものjava.*.*;. その場合、どのようListに解決されますか?あいまいさが多すぎるでしょう。

于 2013-10-18T19:31:26.740 に答える
2

いいえ、ワイルドカード インポートを使用すると、コードが読みにくくなるため、一般的に悪いスタイルになります。

于 2013-10-18T19:25:54.017 に答える
0

ワイルドカード インポートを使用する場合のいくつかの欠点:

  1. まったく使用しない可能性のあるクラスが含まれることになります。あなたが取り組んでいるものの明確な絵ではありません。
  2. 悪いプログラミング手法と見なされるより広い範囲。
  3. 最も重要なことは、名前空間の競合を引き起こす可能性があります。2 つのパッケージからすべてをあからさまにインポートすると、異なるパッケージの同じ名前の 2 つのクラス間で衝突が発生する可能性があります。

編集:必要以上のクラスをインポートしてもかさばるコードにはならないようですが、クラスを明示的にインポートして、自分が何を扱っているかを明確に把握することをお勧めします。

于 2013-10-18T19:31:59.247 に答える