Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Vector mit beliebigen Klassen an Funktion übergeben
ich bin mir nicht ganz sicher ob das wirklich ein Anfänger Thema ist und ich glaub so ganz klar ist aus dem Titel auch nicht was ich will, aber ich erläuter es ja jetzt sowieso.
Also ...
Ich möchte eine Funktion schreiben der ich einen Vektor übergeben kann der verschiedene Klassen enthalten kann.
Die Aufrufe sollen so aussehen:
[Java]
Vector<EigeneKlasse1> alles = new Vector<EigeneKlasse1>();
funktion(alles);
[/Java]
und ...
[Java]
Vector<EigeneKlasse2> alles = new Vector<EigeneKlasse2>();
funktion(alles);
[/Java]
und ...
[Java]
Vector<Basisklasse> alles = new Vector<Basisklasse>();
funktion(alles);
[/Java]
Wie muss dazu jetzt die Funktionssignatur aussehen?
[Java]
public void funktion(Vector<???> alles)
{
...
}
[/Java]
die Frage ist, wenn sie so gar nix miteinander zu tun haben, warum willst du dann sie in eine Methode pressen und vor allem - was soll diese Methode machen ?
Schon klar. Bin davon ausgegangen er würde das so wollen (warum auch immer).
Vielleicht soll die Methode einfach nur sysout auf die Objects ausführen. :bahnhof:
Alternativ lauter instanceof (please no).
Edit:
Mehr Informationen wären also nicht schlecht, was du (TO) eigentlich machen möchtest.
ist das ganze nicht wegen TYPE-EREASURE sowieso egal ?
ich mein : der einzige der meckert ist der compiler ... zur sicherheit sollte man die methoden doch eh immer mit instanceof vollstopfen um runtime-fehler zu vermeiden ...
ist das ganze nicht wegen TYPE-EREASURE sowieso egal ?
ich mein : der einzige der meckert ist der compiler ... zur sicherheit sollte man die methoden doch eh immer mit instanceof vollstopfen um runtime-fehler zu vermeiden ...
sollte man nicht - wenn man anfaengt seine methode mit instanceofs vollzustopfen ist ein grundlegender fehler im Design. Man versucht irgendwas zusammenzupressen, was nicht zusammengehoert.
ist eigentlich genau die antwort die ich wollte ...
sollte TO lediglich zeigen das es wenig sinn macht klassen die überhaupt nichts mit ein ander zu tun haben in einer methode zu verarbeiten und diese dann mit instanceof vollzukrachen nur um dann aus der List die einzelnen klassen wieder zu trennen ...
Ich versteh nicht ganz was ihr da grad redet, könnte aber auch an meinem aktuellen müdigkeitszustand liegen (gestern war Betriebsweihnachtsfeier).
Wie dem auch sei, ich feil da grad noch ein wenig dran rum und dann poste ich das Mini-Tool sowieso, dann könnt ihr euch das selber alles angucken und dran rumwerken und mir Feedback geben.
worüber wir uns hier gerade gedanken machen ist der punkt das es ein schlechtes design ist und auch wenig sinn macht wenn du objekte unterschiedlicher klassen die überhaupt nichts mit ein ander zu tun haben *also nicht mal eine gemeinsame basis-klasse haben oder kein gemeinsames interface implementieren* in einen Vector *oder sonstige List* zu stecken und diesen dann einer methode zu übergeben die vollgekracht ist mit instanceof - abfragen um dann klassen-spezifische dinge umzusetzen ...
mal ne gegenfrage : wofür brauchst du das überhaupt ?
Der Vector soll keine Objekte verschiedener Klassen enthalten, dass das Quatsch ist ist mir auch klar.
Die Funktion soll verschiedene Vektoren akzeptieren die jeweils unterschiedliche Objekte einer Klasse enthalten.
so dass ich der Funktion halt Vector<Baum>, Vector<Auto> oder Vector<Friteuse> übergeben kann.
... und das ganze ist auch schon seit einigen Posts gelöst, mit funktion(Vector<?> alles) ging es
... und ja, die Methode soll in der Tat nur JSONs daraus bauen, nix spezifischeres, also wenn dass alles Objects sind ist das völlig in Ordnung
Der Vector soll keine Objekte verschiedener Klassen enthalten, dass das Quatsch ist ist mir auch klar.
Die Funktion soll verschiedene Vektoren akzeptieren die jeweils unterschiedliche Objekte einer Klasse enthalten.
so dass ich der Funktion halt Vector<Baum>, Vector<Auto> oder Vector<Friteuse> übergeben kann.
... und das ganze ist auch schon seit einigen Posts gelöst, mit funktion(Vector<?> alles) ging es
... und ja, die Methode soll in der Tat nur JSONs daraus bauen, nix spezifischeres, also wenn dass alles Objects sind ist das völlig in Ordnung
Genau das ist die Anwendung der Bivarianz (also der Generic Wildcard ?), wenn die darunter liegenden Objektinstanzen keine Rolle spielen, es aber auf die Struktur der Containerklassen ankommt.
Fälschlicherweise (nach alter C-Manier) wird oft instanceof benutzt und zurückgecastet, aber das ist nicht Java, dann stimmt, wie schon oben aufgeführt etwas am Design nicht, weil es ja auf die Objektinstanzen der Container ankommt.
Der Grundgedanke war hier eine kleine Oberfläche zu haben mit der sich Daten verarbeiten lassen,
im Sinne von ...
Daten aus einer JSON in SQL-Befehle umwandeln oder ...
bestimmte Objekte als JSON abspeichern oder ...
um diverse Algorithmen zu testen, halt verschiedene Werte eingeben und sich dann eine Ausgabe anzeigen lassen oder ...
für was auch immer man es sonst noch brauchen kann.
das Ganze ist als Entwickler-Tool gedacht, so dass halt die genauen Algorithmen dann immer implementiert werden müssen.
Mir war es soweit schonmal in diversen Situationen recht nützlich, ich hoffe dass es auch anderen so geht.
Fühlt euch frei es zu verändern, zu erweitern oder was auch immer damit anzustellen, ich freu mich auch immer über Rückmeldungen, Email Adresse steckt im Programm