【发布时间】:2013-09-02 02:03:19
【问题描述】:
今天,其他一些开发人员发现了一个带有一些有趣嵌套的 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 编译器试图通过不让我们创建与包含类同名的内部类来避免什么?
【问题讨论】:
-
一个更好的问题可能是你为什么要这样做。
-
好吧,老实说,我不知道。就像我说的,生成它的是 JAXB 的代码生成。
-
好吧,我想说真正的问题是设计糟糕的 XML 模式。
-
这点也可能是对的。模式也不是我们的,它是 EDRM-XML。也许这很可怕。我不确定我们有什么投诉渠道。
标签: java inner-classes