请看下面的代码:
考虑以下代码:
import java.util.Calendar;
class Demo
{
class Calendar {}
public static void main (String[] args) {
// System.out.println(Calendar.DAY_OF_WEEK); // Would be an error.
}
}
这段代码编译没有问题;但如果你在Demo
中引用Calendar
时,你将会引用到Demo.Calendar
,而不是java.util.Calendar
。
这个import显然是多余的。但很奇怪它被允许存在,因为根据JLS Sec 7.5.1的规定,你不允许导入与同一编译单元中定义的顶级类名相同的类:
import java.util.Calendar; // error: Calendar is already defined in this compilation unit
class Calendar {}
第一个代码示例中这样的导入不会在编译时出错,是否有实际原因?
n
的顶级[sic]类型”。这不是你展示的情况。 - Lew BlochCalendar
并且有一个名为Calendar
的顶级类。我知道为什么第二种情况是被禁止的,但我很惊讶规范没有规定第一种情况也应该被禁止。 - Andy TurnerDemo
可以很好地导入Calendar
。 - Lew Bloch