Polymorphie generics einsteigerprobleme

Max8787

Neues Mitglied
Hallo, ich bin beim Programmieren meines ersten Generics auf Probleme gestoßen. Vorab: das programm unten macht natürlich nichts sinnvolles und soll nur deutlich machen wo mein problem liegt.

Zum eigentlichen Problem:
Bei changeTo(b) wird folgender Fehler ausgegeben:
The method changeTo(List<T>) in the type List<T> is not applicable for the arguments (List<Integer>)

mir ist klar dass a.changeTo(b) funktionieren würde, allerdings verbietet das die aufgabenstellung, ebenso wie die benutzung von typecasts

hat jemand eine idee, wo der fehler liegen könnte? danke für antworten!

[Java]
public class List<T> {
// AttributE
public T info;
public List<T> next;
// KonstruktorEN
public List(T info, List<T> next) {
this.info = info;
this.next = next;
}
// MethodeN
public void insert(T x) {
next = new List<T>(x,next);
}
public void delete() {
if (next!=null) next=next.next;
}
public List<T> changeTo(List<T> list){
return list;
}
// Hauptprogramm
public static void main(String[] args){
List<Integer> a = new List<Integer>(1, null);
a.insert(2); a.insert(3);

List<Integer> b = new List<Integer>(4, null);
b.insert(5); b.insert(6);

changeTo(b);
}
}
[/Java]
 
Der Fehler ist, dass du eine Methode wie eine Funktion aufrufen willst, nämlich ohne Klasse oder Instanz. Das kannst du in Python machen, aber nicht in einer beinahe vollständig OOP wie Java.
Wenn man die Methode nicht über eine Instanz aufrufen darf dann halt als Klassen Methode:
Java:
public static <X> List<X> changeTo(List<X> list){
return list;
}
List.changeTo(b);

Hmm, soll das Beispiel abschrecken sich bei so verqueren und schlecht lesbaren Lösungen besonders toll vorzukommen? Dann hat es was.
 
ja das scheint des rätsels lösung zu sein. aber ich bin der gleichen meinung, die aufgabenstellung ist nicht sinnvoll. danke nochmal!
 
Das kannst du in Python machen, aber nicht in einer beinahe vollständig OOP wie Java.

Aehm, sorry aber diesen Kommentar kann ich mir grad nicht verkneifen... Python ist vollstaendig OOP - im Gegensatz zu Java.

Der Fehler hat aber auch nix mit OOP oder nicht OOP zu tun, sondern einfach damit, dass versucht wird, eine nicht definierte Methode aufzurufen (nicht definiert im Scope).
 

Zurück
Oben