今天,其他一些开发人员发现了一个带有一些有趣嵌套的 XML 模式,JAXB 将其编译成这样的结构:
public class Choices
{
public static class Choice
{
public static class Choice
{
}
}
}
如果你尝试编译它,Java 编译器会说,
class Choices.Choice is already defined in class Choices
当然,最里面的class Choice
声明上的下划线。
但我说,类Choices.Choice
不是它试图声明的。相反,它试图声明Choices.Choice.Choice
,这将是一个不同的类。
有趣的是,这很好:
public class OuterClass
{
public static class Inner1
{
public static class Inner2
{
}
}
public static class Inner2
{
public static class Inner1
{
}
}
}
但这是被禁止的:
public class OuterClass
{
public static class Inner1
{
public static class Inner2
{
public static class Inner1
{
}
}
}
}
所以我想规则是一个类的名称不能与任何级别的包含类相同。显然这里的修复是已知的——让 JAXB 不要生成无效代码。
但我的问题是,为什么这个限制甚至存在?Java 编译器试图通过不让我们创建与包含类同名的内部类来避免什么?