Interface implementieren mit Abstrakten Typen?

Terry12

Aktives Mitglied
hi,

ich hab hier ein Beispiel :
Java:
public class RedBlackTree<TKey extends Comparable<TKey>, TValue> {

also TKey und TValue sind ja eigene Typen die man in einer eigenen Klasse selbst definiert hat nehme ich mal an...

Meine Frage ist , was bedeutet der ganze Ausdruck:
Java:
<TKey extends Comparable<TKey>, TValue>
?

wenn ich in spitzen Klammern schreibe TKey extends Comparable<TKey>,TValue> ? also TKey erweitert von der Oberklasse Comparable und dann <TKey>,TValue> ? << kann mir das mal jemand auseinanderpflücken, am besten mit Beispiel ich hab kein schimmer was das bedeutet und ich glaube das ist wichtig, z.B Wenn man unbestimmte bzw alle Datentypen als parameter in eine Liste oder so einfuegen will...
 
es sind zwei generische Parameter, üblicherweise T und U, keine konkreten Klassen sondern beliebige Parameter,
wie HashMap<T,U>

der erste, T, soll Comparable<T> sein, also für sich selber Comparable,
das sind die meisten Klassen wie String & Co.,

nur bei Vererbung wäre das etwas interessant, bei Comparable immer ein gewisses Problem,
wenn A zu A vergleichbar ist und B von A erbt, kann man dann ein B mit einem A vergleichen, reicht es wenn der A-Anteil gleich ist?
mindestens auch beim Interface Comparable hat man da ein technisches Problem
 
aha wie geh ich genau vor wenn ich zwei beliebige Typen mit der compareTo Methode (z.B in einem Baum) miteinander vergleichen will? Klar, es müssen zwei gleiche Typen sein, aber sagen wir mal ich will als Oberklasse ALLE typen vergleichen können, dann vergleiche ich im Programm nur zwei strings miteinander, mach ich dann ein eigenes Interface für die KLasse mit Object als Parameter bzw Typ T als Parameter und geb dann in meiner Fachklasse Typ <String> als Comparable an oder wie?
 
Häwas? Du kannst sowas machen wie
Java:
RedBlackTree<String, ValueType> t = new RedBlackTree<String, ValueType>();
Oder meinst du wie man eine eigene Klasse "Comparable" macht?

BTW: Die Anforderung an "TKey", Comparable sein zu müssen, ist eigentlich zu streng. In vielen Fällen muss man diese Anforderung NICHT hinschreiben, und kann stattdessen die Option bieten, einen Comparator für die Key-Typen mit anzugeben.
 
Hey!

Terry das wird nicht geschehen. Sobald du
Java:
RedBlackTree value1 = new RedBlackTree<String,Object>();

erstellst definierst du hiermit das in diesem RedBlackTree nur Einträge nach einem String und einem Object als Value gespeichert werden.
Wenn du ein anderen Key willst erstellst du ein neues Objekt von RedBlackTree und befüllst es neu.
Du kannst es nur für einen Key und Value typen definieren. Das würde sonst zu Dateninkonsistenz führen.


lg

Rene
 

Zurück
Oben