2017-02-01 7 views
0

Freunde! Ich beschloss, mehr über Generika zu lesen, und ich stecke fest in wiki.Generic Class Java - wie zu verstehen?

A Klasse ist generisch, wenn es eine oder mehr Variablen vom Typ deklariert. Diese Typvariablen werden als Typparameter der Klasse bezeichnet. Es definiert eine oder mehrere Typvariablen, die als Parameter fungieren. Eine generische Klassendeklaration definiert eine Reihe von parametrisierten Typen, einen für jeden möglichen Aufruf des Typparameterabschnitts. Alle diese parametrisierten Typen haben zur Laufzeit dieselbe Klasse.

Also, wir haben Satz

Eine generische Klassendeklaration eine Reihe von parametrisierte Typen definiert, eine für jeden möglichen Aufruf des Typs Parameterbereich.

Wie ich es verstehe? Wenn wir eine Instanz unserer generischen Klasse mit einem konkreten Typargument (Erstellung des parametrierten Typs ich meine, Box<Integer> test = new Box<Integer>();) erstellen, führt dieser parametrisierte Typ in diesem Moment den Aufruf Typ Parameter in sich Klasse Box<T>{}.

Verstehe ich es richtig?

Antwort

2

Das ist richtig, ein generischer Typ ist ein Typ, für den der Typ eines oder mehrerer Felder bei der Verwendung und nicht in der Deklaration definiert ist.

Wenn Sie also ein List<T> hatten, können Sie haben eine List<Cat> und List<Dog>

Oder für ein Wörterbuch

AClassWithTwoDifferentTypes<K,V> 
AClassWithTwoDifferentTypes<Integer,String> 
AClassWithTwoDifferentTypes<Integer,Integer> 
AClassWithTwoDifferentTypes<String,String> 
+0

Bitte nicht 'Dictionary' als Beispiel verwenden Sie, wie seine Verwendung (aufgrund abgeraten zu seiner Implementierung HashTable). Wie wäre es nur mit 'Map'? – rkosegi

+0

Ich habe mich nicht auf eine bestimmte Wörterbuchimplementierung bezogen, obwohl ich erkenne, dass dies ein allgemeiner Sammlungsname ist. Wenn es Ihnen hilft, besser zu schlafen, können Sie es sich nur als Kartenschnittstelle vorstellen. – awiebe

+0

Von Javadocs von 'Dictionary': ** HINWEIS: Diese Klasse ist veraltet. Neue Implementierungen sollten die Map-Schnittstelle implementieren, anstatt diese Klasse ** zu erweitern. Also, OP mit veralteten Klassen zu beraten, hat mir nicht geholfen, besser zu schlafen. – rkosegi