Die Syntax T erweitert ClassT in Java

8

Ich habe einige Gedanken zu folgenden Themen:

%Vor%

1 - Warum sollte die Klasse, die MaxStack implementiert, wie folgt geschrieben werden:

%Vor%

und nicht public class MaxStackclass<T extends Comparable <T>> implements MaxStack<T extends Comparable <T>> ?

2- Warum sollten die privaten Variablen dieser Klasse, wenn ich Generika verwende, nur mit <T> und nicht mit <T extnds Comparable<T>> geschrieben werden? Zum Beispiel private List<T> stack= new ArrayList<T>();

3-Was ist der Unterschied zwischen <T extends Comparable<T>> und <T extends Comparable> - wenn ich einige Elemente in meiner Klasse vergleichen will, sind beide O.K, nein?

Edit: Ich denke, das Problem mit 3 ist, dass es vielleicht erlaubt, eine Liste einzufügen, die auf die zweite Art definiert wurde, um verschiedene Elemente zu haben, die alle von vergleichbar sind und dann, wenn ich sie vergleichen will t möglich sein, da wir String nicht mit Integer vergleichen können, reichen beide von Comparable aus.

    
Numerator 02.09.2011, 11:21
quelle

4 Antworten

8
  1. In der Deklaration maxStackclass<T extends Comparable <T>> haben Sie bereits die Grenzen für T ausgedrückt. Du brauchst es also nicht mehr.

  2. Grund wie oben. Es ist nicht mehr erforderlich, die Grenzen für denselben Typparameter erneut anzugeben.

  3. <T extends Comparable<T>> bedeutet, dass T die Schnittstelle Comparable implementieren muss, die zwei T Instanzen vergleichen kann. Während <T extends Comparable> bedeutet T implementiert Comparable , so dass es im Allgemeinen zwei Object s vergleichen kann. Ersteres ist spezifischer.

  

Wenn ich einige Elemente in meiner Klasse vergleichen will, werden beide O.K sein,   Nein?

Nun, technisch können dasselbe Ergebnis erzielen, wenn Sie beide verwenden. Für die Deklaration <T extends Comparable> wird es jedoch unnötige Umwandlungen geben, die Sie vermeiden können, indem Sie den Typ safe <T extends Comparable<T>>

verwenden     
Swaranga Sarma 02.09.2011, 11:28
quelle
2

1) Die Klasse hat einen Typparameter T mit einer Grenze ( extends Comparable <T> ), dieser Parameter wird an die Schnittstelle übergeben (die hier die gleiche Grenze benötigt). Wenn Sie einen Typparameter übergeben, dürfen Sie seine Bindung nicht wiederholen - warum sollten Sie dies tun?

2) wie 1), hat der Typ Parameter seine Grenze deklariert, keine Wiederholung notwendig.

Zur Klarstellung:

Der erste Typ Parameter Vorkommen (hier hinter dem Interface oder Klassennamen) ist seine Deklaration. Jedes folgende Vorkommen ist eine Verwendung. Sie würden sogar niemals eine Variablentypdeklaration schreiben, wenn Sie sie benutzen, richtig?

    
Arne Burmeister 02.09.2011 11:29
quelle
2

"3-Was ist der Unterschied zwischen <T extends Comparable<T>> und <T extends Comparable> - wenn ich einige Elemente in meiner Klasse vergleichen will, sind beide O.K, nein?"

Nein, beides wird nicht in Ordnung sein. Angenommen, ich habe eine Klasse Foo , die implements Comparable<Bar> , aber die Klassen Foo und Bar haben keine Beziehung zueinander. Dann kann Foo nicht mit anderen Objekten vom Typ Foo verglichen werden. <T extends Comparable<T>> wird dies als ein Problem feststellen. <T extends Comparable> wird nicht.

    
newacct 02.09.2011 21:00
quelle
0
%Vor%

mehr Details hier

    
benaich 23.06.2016 09:41
quelle

Tags und Links