Existiert ein mehrfach parametrisierbarer Datentyp?

mc_gulasch

Erfahrenes Mitglied
Heyho und guten Morgen!

Wie man weiß, kann man Lists, ArrayLists etc. mit gewissen Datentypen parametrisieren (ArrayList<String> bla) ... allerdings benötige ich jetzt etwas wie eine (geordnete) Menge, ein Record, irgendsowas, wo ich sagen kann:
Das Ding hat beispielsweise die Größe 3, das erste Element ist ein String, das zweite ein Integer, das dritte ein Double oder so.
Es soll also ein allgemeiner Datentyp sein, den ich in Länge und Parametrisierung frei wählen kann. Optimal wäre also eine Art ArrayList, wobei ich angeben könnte:

Code:
 ArrayList<int,String,double> bla = new ArrayList(3);

Gibt es sowas bereits? Ich finds nicht :( Falls nicht, wie kann ich denn eine parametrisierbare Klasse selbst schreiben? Vielleicht steh ich auch grad vollkommen auf dem Schlauch...es ist ja noch früh (...aber ich hatte schon nen Kaffee...vielleicht hilft noch einer)

Ich hoffe, ich konnte so ungefähr klarstellen was mir auf dem Herzen liegt.

Gruß vom Gulasch
 
Theoretisch ein Dateityp, von dem alle Erben. Wäre wohl Object, da ALLES davon erbt (außer Object selbst).
Praktisch würde sich in deinen Fall aber wohl mehr anbieten alles zum String zu parsen. Dafür event. eine Klasse, die von ArrayList<Object> erbt, und eine 2. ArrayList enthält, die paralell dazu die Class-Typen der Eintragungen speichert, und es so etwas automatisiert. In wie fern das geht musst du selbst herausfinden, hab sowas noch nie versucht. Nur einmal in eine HashMap<String, Object>, um alle globalen Variablen darin zu speichern. War aber nicht sonderlich schön.
Eine andere Möglichkeit wäre es aber event. eine ArrayList mit einer menge Listen verschiedener Genetics zu füllen.
 
Supergeil. Danke. Das bringt mich schon mal sehr viel weiter. Allerdings hab ich nach wie vor folgendes Problem:

Code:
public class myObject<T>{
....}

definiert mir ein Object vom Typ T. Ich kann auch Listen angeben durch

Code:
public class myObject<T,E>{
...}

aber was, wenn ich mal zwei Objekte, mal drei Objecte etc. zuweisen will. Ich bräuchte also eine dyn. Liste als Parametrisierung, so dass man schreiben kann

Code:
myObject<int,double> bla;
myObject<int,String,double> blubb;
....
 
Erstmal: Bitte halte dich einigermaßen an die Codingconventions und schreibe Klassennamen groß.

Ansonsten: Was willst du denn mit sonem Datentyp dann machen?
 
Jawohl, Codingconventions!

Ich schreibe ein Programm, das mit einem anderen Tool interagiert. Dieses Tool liefert div. Datentypen und erhält div. Datentypen zurück. Mal mehr, mal weniger, aber meistens immer verschiedene. Ich will jetzt nicht für jede Rückgabe einen eigenen Datentyp erzeugen, sondern eben lieber einen bestehenden parametrisieren. Das Problem ist eben die Dynamik. Zwar weiß ich immer wo welche und wieviele übergeben werden bzw. zurückgegeben werden, aber für jede Aktion einen Datentyp is zu viel. Das nächste Problem ist, dass ich immer gerne wüsste, welchen Datentyp ich gerade habe, wodurch meine bisherige Lösung mit unparametrisierten Object-Arrays auch nicht der Knüller ist.
 
Aber welchen Datentyp du gerade hast weißt du zur Laufzeit mit Generics eben halt nicht.
 
Hi
So ein Konstrukt wäre schon brauchbar. Ist aber glaube ich so nicht möglich.
Aber für das Austauschen gibt es auch andere Möglichkeiten.
Du könntest die Infos z.B. mit einer HashMap (Sofern du die einzelnen Werte ihrgendwie beschrifften willst) oder als ArrayList austauschen. Und mit xy instancof Class kannst du auch den Typ des Objekts in der Liste überprüfen. Und wenn einer der Werte eine Liste ist, dann pack einfach die Liste in die zurückzugebende ArrayList. Mit Generics kannst dann so natürlich nicht arbeiten.

Gruss
 

Neue Beiträge

Zurück