首先,我不是 Java 人,但我发现表面上看起来与导入的工作方式不一致。
假设你有一个文件,在这个文件中你有你的 main 函数,并且你还定义了一个类Foo,现在一个不同的Foo实现也存在于一个包中。假设您想在您的功能中使用这两个版本。
您不能从它的包中显式导入Foo,即import mypackage.Foo;
由于这将导致与文件中本地定义的类发生冲突,因此在编译时会产生错误。
你可以做的是导入整个包,即import mypackage.*;
这将起作用,您可以使用完全限定名称访问Foo,使用简单名称将导致使用本地Foo。我看到的不一致之处在于,虽然前者会产生错误(您已经导入了一个类,并且导入的唯一目的是能够使用简单名称而不是完全限定名称),但后者甚至不会导致警告.
我原以为这两种情况都会产生警告,即您可能使用了错误的类,因为它在 2 个地方定义,或者 import 语句是多余的,因为使用简单名称将解析为本地定义的类,而不是导入的一。
所以我的问题是:以这种方式实施是否有根本原因?
是的,这是一个异常情况,我明白这一点。