it-swarm.com.de

Java- Die Bedeutung von <T erweitert Comparable <T >>?

Der vollständige Kontext ist:

public class RClass<T extends Comparable<T>>

Würde ich mit Recht sagen, dass die Anweisung im Titel bedeutet, dass die in die Methode eingebundenen Argumente entweder ein Objekt einer Klasse sein müssen, die Comparable OR eine ihrer abgeleiteten Klassen implementiert?

Vielen Dank.

31
LTH

Dies bedeutet, dass der Parameter type den Vergleich mit anderen Instanzen seines eigenen Typs über die Schnittstelle Comparable unterstützen muss.

Ein Beispiel für eine solche Klasse finden Sie im Oracle-Tutorial Object Ordering . Beachten Sie das ähnliche Muster zu T extends Comparable<T> im folgenden Auszug:

public class Name implements Comparable<Name> {
   ...
   public int compareTo(Name n) { ... }
}
33
Andy Thomas

Java- Die Bedeutung von<T extends Comparable<T>>?

a) Comparable <T> ist eine generische Schnittstelle (denken Sie daran, es ist eine "Schnittstelle", d. h. keine "Klasse")

b) extends bedeutet Vererbung von einer Klasse oder einer Schnittstelle.

Ab dem oben genannten Punkt # a ist es eine Schnittstelle. (Denken Sie daran, es ist eine Vererbung von einer "Schnittstelle", d. H. Nicht von einer "Klasse".)

c) Aus den oben genannten beiden Punkten #a & #b,

hier erweitert "eine Schnittstelle" "eine andere Schnittstelle".

Für diese Klasse sollte eine Schnittstelle definiert sein. Hier nur ein Beispiel

interface MinMax<T extends Comparable<T>> { 
    T min(); 
    T max(); 
} 

d) Jetzt sollte Ihre Klasse, d. h. public class RClass {}

1 # BEIDE "implementieren" diese "generische Schnittstelle" Comparable<T> .. !!!

beispiel: public class RClass<T> implements Comparable<T>

2 # OR eine Schnittstelle erstellen und auf diese "generische Schnittstelle" erweitern Comparable<T> Ex:

interface MinMax<T extends Comparable<T>> { 
   T min(); 
   T max(); 
} 
class RClass<T extends Comparable<T>> implements MinMax<T> {
    .....
    .....
}

Achten Sie hierbei besonders darauf, wie der Typparameter T von RClass deklariert und dann an MinMax übergeben wird. Da MinMax einen Typ erfordert, der Comparable implementiert, muss die implementierende Klasse (in diesem Fall RClass) dieselbe Grenze angeben. Darüber hinaus ist es nicht erforderlich, diese Bindung in der implements-Klausel erneut anzugeben, sobald sie hergestellt wurde.

9
guhan vj

Irgendwo in dieser Klasse muss der Programmierer so etwas schreiben

if(t.compareTo(othert) < 0) {
    ...
}

Damit dies funktioniert, muss der Typ T eine compareTo-Methode haben, die ihn mit einem anderen Objekt des Typs T vergleicht. Extending Comparable garantiert unter anderem die Existenz einer solchen Methode.

5
jforberg

Ja, und denken Sie daran, dass Objekte von Klassen, die von Comparable ABGELEITET SIND, Comparable Objekte sind. Vererbung ist ein is-a Beziehung.

2
Luchian Grigore

Dies bedeutet, dass Sie nur eine Instanz von RClass mit einem Typ erstellen können, der buchstäblich Comparable<T> Erweitert. Somit,

RClass<Integer> a;

ist akzeptabel, da IntegerComparable<Integer> erweitert, während

RClass<Object> b;

ist nicht, da Object keine Klasse ist, die überhaupt vergleichbar ist.

2
djhaskin987

==> guhanvj, <T extends Comparable<T>> bedeutet, dass <T> die Obergrenze von Comparable<T> - Objekten hat. <T> Kann also die Klassen Byte, Character, Double, Float, Long, Short, String und Integer enthalten, die alle die Schnittstelle Comparable<T> Für die natürliche Reihenfolge implementieren.

Einfach ausgedrückt muss der generische Typ T vergleichbar sein, um ihn mit zu vergleichen. Andernfalls können Sie T.compareTo nicht ausführen. In Punkt 28 Effektives Java wird Folgendes vorgeschlagen: "always use Comparable<? super T> in preference to Comparable<T>. <T extends Comparable<? super T>>"

1
Andrew Xie