Hallo alle zusammen...
ich möchte eine einfach verlinkte Liste in Java basteln. Dabei soll das letzte element nicht mit null gekennzeichnet sein, sondern wieder auf das Erste zeigen. Einfach deshalb das ich ein element aus der Liste nehmen kann ohne die Liste kennen zu müssen.
Folgende Datenstrukturen hab ich jetzt angelegt:
ACHTUNG addToQueue() und getItem sind nur dummies zum testen...
ACHTUNG addToQueue() und getItem sind nur dummies zum testen...
TObjectQueueItem repräsentiert ein Element in der Liste. FObjLink ist der ptr auf das nächste Objekt. Dieser wird parametrisiert mit ObjectQueueItem welches zumindest von TObjectQueueItem erben muss... soweit so gut.
Erste Frage:
was bedeutet das <?> in der Zeile
"class TObjectQueueItem<ObjectQueueItem extends TObjectQueueItem<?>>"
Ich hab das nur hingemacht weil ich ansonsten ne warning bekomme da ich ObjectQueueItem nicht parametrisiert hab. Aber ich weiß ja an der Stelle noch nicht was <?> sein wird...
Zweite Frage:
Also TObjectQueue ist jetzt meine Liste und erbt von TObjectQueueItem. Dabei ist FObjLink der ptr auf das erste Element bzw auf die Liste selbst wenn sie leer ist. Und genau das ist das Problem. FObjLink ist ja parametrisiert und zeigt auf irgendein "höheres" Object. Wenn ich den jetzt auf die Liste selbst zeigen lassen will, gibt das ne Exception weil Java das implizit auf Typkompatibilität prüft.
Ich möchte aber TObjectQueue allgemein halten. Sprich da soll nur ein ptr aufs erste Object stehen und halt generische Methoden um was mit der Liste zu machen. Deshalb kann TObjectQueue nicht von "ObjectQueue" abgeleitet sein. Oder seh ich das falsch?
Liegt der Fehler jetzt in meinem Ansatz? Also denk ich falsch? Würde man das anders machen?
Gibt es in Java auch die Möglichkeit Objekte zu casten ohne das überprüft wird ob die kompatibel sind?
Hoffe ich konnte einigermaßen rüber bringen was ich machen will und wo das Problem liegt.
lg
ich möchte eine einfach verlinkte Liste in Java basteln. Dabei soll das letzte element nicht mit null gekennzeichnet sein, sondern wieder auf das Erste zeigen. Einfach deshalb das ich ein element aus der Liste nehmen kann ohne die Liste kennen zu müssen.
Folgende Datenstrukturen hab ich jetzt angelegt:
ACHTUNG addToQueue() und getItem sind nur dummies zum testen...
Code:
public abstract class TObjectQueueItem<ObjectQueueItem extends TObjectQueueItem<?>>
{
protected ObjectQueueItem FObjectLink;
public TObjectQueueItem()
{
FObjectLink = (ObjectQueueItem)this;
}
public void addToQueue(ObjectQueueItem aItem)
{
FObjectLink = aItem;
}
public ObjectQueueItem getItem()
{
return FObjectLink;
}
}
public class TObjectQueue<ObjectQueueItem extends TObjectQueueItem<?>> extends TObjectQueueItem<ObjectQueueItem>
{
public TObjectQueue()
{
super();
}
}
ACHTUNG addToQueue() und getItem sind nur dummies zum testen...
TObjectQueueItem repräsentiert ein Element in der Liste. FObjLink ist der ptr auf das nächste Objekt. Dieser wird parametrisiert mit ObjectQueueItem welches zumindest von TObjectQueueItem erben muss... soweit so gut.
Erste Frage:
was bedeutet das <?> in der Zeile
"class TObjectQueueItem<ObjectQueueItem extends TObjectQueueItem<?>>"
Ich hab das nur hingemacht weil ich ansonsten ne warning bekomme da ich ObjectQueueItem nicht parametrisiert hab. Aber ich weiß ja an der Stelle noch nicht was <?> sein wird...
Zweite Frage:
Also TObjectQueue ist jetzt meine Liste und erbt von TObjectQueueItem. Dabei ist FObjLink der ptr auf das erste Element bzw auf die Liste selbst wenn sie leer ist. Und genau das ist das Problem. FObjLink ist ja parametrisiert und zeigt auf irgendein "höheres" Object. Wenn ich den jetzt auf die Liste selbst zeigen lassen will, gibt das ne Exception weil Java das implizit auf Typkompatibilität prüft.
Ich möchte aber TObjectQueue allgemein halten. Sprich da soll nur ein ptr aufs erste Object stehen und halt generische Methoden um was mit der Liste zu machen. Deshalb kann TObjectQueue nicht von "ObjectQueue" abgeleitet sein. Oder seh ich das falsch?
Liegt der Fehler jetzt in meinem Ansatz? Also denk ich falsch? Würde man das anders machen?
Gibt es in Java auch die Möglichkeit Objekte zu casten ohne das überprüft wird ob die kompatibel sind?
Hoffe ich konnte einigermaßen rüber bringen was ich machen will und wo das Problem liegt.
lg