Ich habe Klasse A mit seiner inneren Klasse definiert A1 und Klasse B mit seiner inneren Klasse B1 definiert. Halten Sie es für in Ordnung, dass Klasse A in ihrer Implementierung sich auf B1 und Klasse B auf A1 bezieht. Ist es nicht ein schlechter Programmierstil? Es ist nur A1 Eine sehr spezifische Klasse und B1 sehr spezifisch, deshalb habe ich sie gekoppelt. Ist es okay, es so zu lassen oder ist es besser, A1 und B1 als separate Klassen zu haben? Was denken Sie? Thx.
Ich glaube, dass, wenn Sie sich auf innere Klassen einer anderen Klasse in einer Ihrer Klassen beziehen müssen, weil möglicherweise die Klasse, die die innere Klasse enthält, einige Methoden zur Verfügung stellen sollte, um dieses Problem zu vermeiden.
Wenn das Problem nicht so ist, dann ist die innere Klasse wahrscheinlich generisch genug, um in beiden anderen Klassen verwendet zu werden, und sollte daher eine unabhängige Klasse sein, die wahrscheinlich Teil desselben Pakets sein sollte, das seinen Kontext spezifiziert der Anwendung / Verwendung.
Sie könnten - obwohl ich denke, dass der Sinn innerer Klassen darin liegt, dass sie innerhalb der äußeren Klassen verwendet werden sollten. Mit anderen Worten, ich bin kein großer Fan der öffentlichen inneren Klassen.
Ich würde A1 und B1 eigentlich als eigene Klasse herausstellen - mir scheint A1 und B1 nicht so spezifisch für A und B zu sein, da A1 von B benutzt wird und B1 von A benutzt wird.
Schauen Sie sich diesen Beitrag an Why / wann sollten Sie verschachtelte Klassen verwenden "Verwenden Sie eine verschachtelte Klasse, wenn die zu verschachtelnde Klasse nur für die einschließende Klasse nützlich ist"
Ich würde möglicherweise versuchen, zwei Dinge:
Verschiebe innere Klassen in separate, da sie nicht mehr logisch sind.
Erstellen Sie einige Schnittstellen, damit A und B zumindest nicht wissen, wo die Klassen A1 und B1 sind.
Ich würde sagen, wenn beide Klassen im gleichen Paket sind, extrahiere die inneren Klassen und mache sie zu einem privaten Paket. Auf diese Weise können beide Klassen (A und B) auf sie verweisen, aber sie sind für andere Klassen außerhalb des Pakets unsichtbar.
Ich denke, du hast zwei separate Designfragen in einem gestellt. Die erste Frage bezieht sich auf die inneren Klassen einer anderen Klasse. Die zweite Frage betrifft die zirkuläre Abhängigkeit zwischen A / A1 und B / B1.
Exponierte innere Klassen
Es gibt viele Gründe, Java innere Klassen zu verwenden.
private
eine andere Bedeutung für äußere Klassen - innere Klasseninteraktionen. Unter vielen dieser Umstände ist die Bezugnahme auf die innere Klasse mit dem Namen durchaus sinnvoll.
Kreisförmige Abhängigkeit
Dies ist häufiger ein Anzeichen dafür, dass Schnittstellen extrahiert werden müssen oder andere spezialisierte Klassen extrahiert werden müssen. Wenn A1, B1 zu einfach sind, um Interfaces etc. zu extrahieren, dann können Sie vielleicht innere Klassen auf andere Weise verwenden: Haben Sie eine äußere Klasse C, die A1, B1 enthält.
Tags und Links java coding-style inner-classes