まず、私はJavaの男ではありませんが、輸入の仕方と矛盾することが表面に現れました。輸入の実施
は、あなたがファイルを持っており、このファイルにあなたがあなたの主な機能を持っていて、今はFooの異なる実装はまた、パッケージ内に存在するFooのは、クラスをも定義していると言います。あなたの機能で両方のバージョンを使いたいとします。
Fooをパッケージから明示的にインポートすることはできません。import mypackage.Foo;
これは、ファイル内でローカルに定義されたクラスと競合するため、コンパイル時にエラーが生成されるためです。
あなたはです。は、パッケージ全体をインポートします。つまり、import mypackage。*;
これは動作します、あなたは地元のはFooの使用になります単純な名前を使用して、完全修飾名を使用してはFooにアクセスすることができます。 私が見ている不一致は、前者がエラーを生成している間に(あなたがクラスをインポートしており、インポートの唯一の目的は、完全修飾名ではなく単純名を使用できることです)、後者は警告。
私は、2つの場所で定義されているように間違ったクラスを使用している可能性があり、単純な名前を使用するとローカルに定義されたクラスに解決されるため、輸入されたものではありません。
私の質問です:このように実装されている根本的な理由はありますか?
はい、それは外れ値の場合です、私はそれを理解しています。
little note:インポートステートメントは、パッケージ名を入力しないためにのみ使用されます。それ以外は何もしません。これは単なるショートカットです。常に完全修飾名を使用する場合、インポートはまったく必要ありません。 –
私はパッケージが存在する理由を理解しています。インポートされたパッケージ内のクラスを参照し、その名前のクラスがローカルで定義されているかどうかにかかわらず、警告を全く持たないローカルに定義されたクラスと同じ名前のクラスを明示的にインポートしようとすると、 どちらの場合も、import文はそのクラスに対して冗長ですが、一方はyieldとerror、他方は何もしません。 – Stinomus