P
Pamfo
Gast
Hallo, ich habe ein kleines Problem mit Generics.
Ich habe mal meine 3 Klassen gekürzt, sodass nur noch das Wichtige drin steht.
Ich habe eine List<T extends DataElement> Klasse, die eine Verkettung von Knoten-Punkten enthält. Jeder dieser Knotenpunkte enthält ein DataElement und eine Referenz auf einen Nachfolger, sodass meine Liste nur den ersten Knoten referenzieren muss.
List-Klasse:
Knot<T extends DataElement>-Klasse
ChainElement<T extends DataElement>-Interface
Jetzt bekomme ich bei der search-Methode in der Liste und der Knoten-Klasse einen Compile-Fehler, der besagt:
"The method search(capture#16-of ?) in the type ChainElement<capture#16-of ?> is not applicable for the arguments (T)"
und in der search der Knoten-Klasse diesen:
"The method search(capture#2-of ?) in the type ChainElement<capture#2-of ?> is not applicable for the arguments (T)"
Ich bin zur Zeit echt am Ende meines Lateins und hoffe, mir kann jemand weiter helfen.
Viele Grüße!
Ich habe mal meine 3 Klassen gekürzt, sodass nur noch das Wichtige drin steht.
Ich habe eine List<T extends DataElement> Klasse, die eine Verkettung von Knoten-Punkten enthält. Jeder dieser Knotenpunkte enthält ein DataElement und eine Referenz auf einen Nachfolger, sodass meine Liste nur den ersten Knoten referenzieren muss.
List-Klasse:
Java:
public class List<T extends DataElement>{
// Referenz auf ChainElement<?>-Objekt, das den Anfang der Liste darstellt
private ChainElement<?> begin;
/**
* Sucht in der Verkettung nach dem Element und liefert bei einem Treffer
* den Knoten zurueck, der das Element besitzt. Bei Misserfolg wird null
* zurueck gegeben.
*
* @param element
* das zu suchende Element
* @return das ChainElement, das das zu suchende Element enthaelt oder null
*/
@Override
public ChainElement<?> search(T element) {
return begin.search(element);
}
}
Java:
public class Knot<T extends DataElement> extends ChainElement<T>{
// Nachfolger-Knoten
private ChainElement<?> next;
// Das Element vom Typ T
private T element;
/**
* Liefert ein Objekt vom Typ ChainElement<?> zurueck, wenn dieses das zu suchende
* Element enthaelt. Enthaelt es das Element nicht, wird der Nachfolger befragt.
* Gibt es keinen Treffer, so wird null zurueckgegeben.
*
* @param element
* das zu suchende Element
* @return das ChainElement, das das Element enthaelt, oder null
*/
@Override
public ChainElement<?> search(T element) {
if (this.element.equals(element)) {
return this;
}
return next.search(element);
}
}
Java:
public abstract class ChainElement<T extends DataElement> {
public abstract ChainElement<?> search(T element);
}
Jetzt bekomme ich bei der search-Methode in der Liste und der Knoten-Klasse einen Compile-Fehler, der besagt:
"The method search(capture#16-of ?) in the type ChainElement<capture#16-of ?> is not applicable for the arguments (T)"
und in der search der Knoten-Klasse diesen:
"The method search(capture#2-of ?) in the type ChainElement<capture#2-of ?> is not applicable for the arguments (T)"
Ich bin zur Zeit echt am Ende meines Lateins und hoffe, mir kann jemand weiter helfen.
Viele Grüße!