Wie interpretiere ich diese generische Typdefinition?

8

Unten finden Sie ein Code-Snippet aus dem netty 4.0.24 -Framework. Es ist verwirrend, den Parameter B type zu interpretieren.

%Vor%     
smwikipedia 10.02.2015, 08:09
quelle

3 Antworten

2

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

%Vor%

Der Rückgabetyp ist also welcher Typ auch immer als erstes Argument angegeben wurde . Betrachtet man die bekannten Implementierungen der Klasse AbstractBoottrap , findet man

%Vor%

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.

    
Marco13 10.02.2015, 17:11
quelle
0

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.

    
PhoneixS 10.02.2015 08:18
quelle
0

"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

    
pdem 10.02.2015 08:28
quelle

Tags und Links