Heute fand einige andere Entwickler ein XML-Schema mit einigen interessanten Verschachtelung, die in eine Struktur wie folgt zusammengestellt JAXB:Warum kann ich keine innere Klasse mit zwei Ebenen und demselben Namen wie die Klasse, die sie enthält, haben?
public class Choices
{
public static class Choice
{
public static class Choice
{
}
}
}
Wenn Sie dies zu kompilieren versuchen, sagt der Java-Compiler,
class Choices.Choice is already defined in class Choices
mit natürlich die Unterstreichung auf der innersten class Choice
Erklärung.
Aber ich sage, Klasse Choices.Choice
ist nicht, was es versuchte zu deklarieren. Stattdessen wurde versucht, Choices.Choice.Choice
zu deklarieren, was eine andere Klasse wäre.
Interessanterweise ist es in Ordnung:
public class OuterClass
{
public static class Inner1
{
public static class Inner2
{
}
}
public static class Inner2
{
public static class Inner1
{
}
}
}
Aber das ist verboten:
public class OuterClass
{
public static class Inner1
{
public static class Inner2
{
public static class Inner1
{
}
}
}
}
Also ich denke, die Regel ist, dass der Name einer Klasse nicht das gleiche wie ein enthalten sein können Klasse auf jedem Niveau. Offensichtlich ist die Behebung hier bereits bekannt - lassen Sie JAXB keinen ungültigen Code generieren.
Aber meine Frage ist, warum ist diese Einschränkung sogar vorhanden? Was versucht der Java-Compiler zu vermeiden, indem wir nicht eine innere Klasse mit demselben Namen wie eine umschließende Klasse erstellen lassen?
Eine bessere Frage könnte sein, warum würden Sie wan t es zu tun. – Bohemian
Nun, um ehrlich zu sein, ich nicht. Wie gesagt, es war JAXBs Code-Generation, die es generiert hat. – Trejkaz
Nun, ich würde sagen, dass das eigentliche Problem ein schlecht entworfenes XML-Schema ist. –