【发布时间】:2009-05-13 08:43:03
【问题描述】:
首先,我不是 Java 人,但我发现表面上与导入的工作方式不一致。
假设你有一个文件,在这个文件中你有你的 main 函数,你还定义了一个类 Foo,现在 Foo 的不同实现也存在于包裹。假设你想在你的功能中使用这两个版本。
您不能从它的包中显式导入 Foo,即 import mypackage.Foo;
由于这会导致与文件中本地定义的类发生冲突,所以在编译时会产生错误。
你可以做的是导入整个包,即import mypackage.*;
这将起作用,您可以使用完全限定名称访问 Foo,使用简单名称将导致使用本地 Foo。 我看到的不一致之处在于,虽然前者会产生错误(您已经导入了一个类,并且导入的唯一目的是能够使用简单名称而不是完全限定名称),但后者甚至不会导致警告.
我原以为这两种情况都会产生警告,即您可能使用了错误的类,因为它在 2 个地方定义,或者 import 语句是多余的,因为使用简单名称将解析为本地定义的类,不是进口的。
所以我的问题是:以这种方式实现它是否有根本原因?
是的,这是一个异常情况,我明白这一点。
【问题讨论】:
-
小提示:import 语句只被使用,所以你不必输入包名,它什么也不做,它只是一个快捷方式。如果您始终使用完全限定名称,则根本不需要导入。
-
我理解为什么存在包,只是能够引用导入包中的类并且根本没有警告似乎不一致 - 无论是否在本地定义了具有该名称的类或没有 - 当您显式尝试导入与本地定义的同名的类时,仍然会出现错误。在这两种情况下,该类的 import 语句都是多余的,但一个产生和错误,另一个什么也不做。
标签: java import implementation