第一に、私はJavaの人間ではありませんが、表面上はインポートの動作と矛盾しているように見えるものに出くわしました。
ファイルがあり、このファイルにmain関数があり、クラスFooも定義したとします。これで、 Fooの別の実装もパッケージに存在します。機能で両方のバージョンを使用するとします。
パッケージからFooを明示的にインポートすることはできません。つまり、mypackage.Fooをインポートします。
これにより、ファイルでローカルに定義されたクラスとの競合が発生するため、コンパイル時にエラーが生成されます。
あなたができることは、パッケージ全体をインポートすることです。つまり、mypackageをインポートします。*;
これは機能し、完全修飾名を使用してFooにアクセスできます。単純な名前を使用すると、ローカルFooが使用されます。私が見る矛盾は、前者はエラーを生成しますが(クラスをインポートし、インポートの唯一の目的は完全修飾名ではなく単純な名前を使用できるようにすることです)、後者は警告を発生させないことです。
どちらの場合も警告が生成されると思います。つまり、2つの場所で定義されているため、間違ったクラスを使用している可能性があります。または、単純な名前の使用はインポートされたクラスではなく、ローカルで定義されたクラスに解決されるため、importステートメントは冗長です。 1。
だから私の質問は:それがこのように実装されている根本的な理由はありますか?
はい、それは外れ値のケースです、私はそれを理解しています。