Unten finden Sie ein Code-Snippet aus dem netty 4.0.24
-Framework. Es ist verwirrend, den Parameter B
type zu interpretieren.
Dies kann möglicherweise als eine Form des seltsam wiederkehrenden Vorlagenmusters interpretiert werden.
In diesem Fall besteht der Hauptzweck des Typparameters B
darin, auf den Erbtyp in der abstrakten Klasse verweisen zu können. Zum Beispiel hat die Klasse AbstractBootstrap
eine Methode
Der Rückgabetyp ist also welcher Typ auch immer als erstes Argument angegeben wurde . Betrachtet man die bekannten Implementierungen der Klasse AbstractBoottrap
, findet man
und
%Vor% Sie erhalten "sich selbst" als den ersten Typparameter. Die Methode channel
dieser Implementierungen gibt also "den Typ selbst" zurück.
Hier wird ein mögliches Verwendungsszenario gezeigt (mit einigen Dummy-Klassen, um es kompilierbar zu machen und den relevanten Teil aufzuzeigen):
%Vor%Nebenbei: Ich plädiere immer für die Typsicherheit, aber sobald diese Typparameter verschachtelt sind, können Sie Klassen- oder Methodendeklarationen erhalten, die Typgrenzen beinhalten, die kaum manuell überprüft werden können. Sie sollten daher nur verwendet werden, wenn der Kompromiss zwischen Lesbarkeit und Typensicherheit wirklich gerechtfertigt ist.
Ich denke, es ist im Grunde eine Klasse, die zwei Parameter, B und C, haben. Der erste Parameter (B) muss etwas sein, das die Klasse selbst (oder ein Kind) erweitert, und der zweite Parameter (C) muss Channel / p>
Es ist ein wenig seltsam darin zu denken, aber Sie können eine Klasse haben, die mit Objekten desselben Typs läuft.
Antwort sortieren: Seine Parameter sind selbst und ein Kanal.
"B" scheint das Subclassed AbstractBootstrap selbst darzustellen. Es denkt (imho) das ist eine seltsame Deklaration, um die Unterklasse in generischen Argumenten erscheinen zu lassen.
Bitte schauen Sie sich die Unterklasse mit der Subtyphierarchie in Eclipse an, vielleicht finden Sie so etwas wie
%Vor%In diesem Beispiel wiederholen wir "AnyClass" in seiner generischen Deklaration