Unten habe ich eine generische OuterClass, eine InnerClass, die OuterClass Generics und verwendet nicht generisches InnerInterface.
%Vor%In der folgenden Hauptmethode verwende ich zwei Instanzen von OuterClass, o1 parametrisiert mit und o2 mit. Meine anonyme innere Klasse myListener versucht den generischen Typ der äußeren Klasse (E) zu verwenden. Der folgende Code kompiliert nicht (Integer i = innerClass.someMethod () - Typenkonflikt: kann nicht von Object in Integer konvertiert werden).
%Vor%Ich möchte ausdrücken, dass myListener für o1 ist, und sollte E = Integer verwenden, ohne es zu wiederholen (ohne zu wiederholen, ich sage es bereits, wenn ich o1 deklariere). Ist das möglich?
Vielen Dank! Faton.
Eine innere Schnittstelle oder enum ist implizit statisch und statische Member sind nicht mit den Typparametern der äußeren Klasse parametrisiert. So sollte InnerInterface
wie folgt aussehen:
Beachten Sie, dass der E
-Parameter von InnerInterface
nicht derselbe ist wie der E
-Parameter von OuterClass
.
Wie immer helfen nicht verschachtelte Typen von private
nicht dabei, die Dinge einfach zu halten. Schieben Sie das Boot hinaus und erstellen Sie neue Dateien, auch wenn Ihre IDe gegen Sie arbeitet.
Trotzdem teilen statische Member einer Klasse nicht die generischen Parameter der äußeren Klasse. Dies ist wichtig für das Verhalten von Feldern und ermöglicht mehr Flexibilität bei statischen geschachtelten Typen (z. B. InnerInterface
), auch wenn Sie dies nicht möchten. In Ihrem Fall müssen Sie also Ihrer (statischen) verschachtelten Schnittstelle einen generischen Parameter geben. Für $ Gottheit, verwenden Sie eine andere Kennung!
(Ich habe auch InnerClass
wo nötig angepasst.)
Bearbeiten: Es ist wahrscheinlich wert, nur die ursprüngliche anonyme innere Klasse isoliert vom Rest der Nutzung zu betrachten:
%Vor% Integer
erscheint nur einmal an einer Stelle, an der eindeutig nicht festgestellt werden kann, dass sie korrekt ist.