Generische Funktion - Frage
-
Guten Abend!
Ich versuch gerade eine Übungsaugabe aus der Uni zu lösen und bin mir in einer Hinsicht leider noch sehr unsicher.
Ich habe eine generische Klasse class Tuple < A, B > ... mit 2 Member A a und B b.
Nun soll ich für diese Klasse eine Funktion "zip" schreiben, die "aus einem Tupel von Listen" eine "Liste aus Tupeln" macht.
Betont wurde in der Aufgabenstellung, dass man die generischen Typen möglichst genau angibt. Das ist der kritische Punkt. Hier ist mein Lösungsansatz für die Aufgabe :public static <T1 extends ArrayList ,T2 extends ArrayList> ArrayList < Tuple < T1, T2 > > zip ( Tuple<T1,T2> t ) { ArrayList < Tuple < T1, T2 > > tList = new ArrayList < Tuple < T1, T2 > > (); int n = t.aInst.size(); if ( t.aInst.size() > t.bInst.size() ) { n = t.bInst.size(); } for ( int i = 0; i < n; i++ ) { tList.add ( new Tuple ( t.aInst.get (i), t.bInst.get (i) ) ); } return tList; }
Wie ihr seht stelle ich sicher, dass T1 und T2 von ArrayList erben. Schließlich soll ja ein Tupel aus Listen übergeben werden.
Dann prüfe ich, welche der beiden Listen länger ist und nimm die Länge der Kürzen.
So, dann verwende ich die Werte der beiden Listen um Tupel zu erstellen, per Schleife.Das Problem : Ich sage, dass ich eine Liste aus Tupeln mit den Typen T1 und T2 will. Aber eigentlich ist das nicht korrekt, oder sehe ich das falsch? zB will ich aus einem Tupel < ArrayList < String > , ArrayList < Integer > > ja eine ArrayList < Tupel < String, Integer > > machen. Ersteres sind Listen, letztere nicht.
Wie löse ich das Problem? Soll ich für die Funktion noch T3 und T4 einführen? Kann man evtl. rausfinden, mit irgendeinem classOf call ( geratener Name ) , welche Typen ich für das Tuple brauche?
Ist das überhaupt wichtig ? Type erasure etc. ? Ich bin einfach etwas verwirrt in der Hinsicht.Ich hoffe die Frage ist versäntlich, sonst versuche ich es noch mal besser zu formulieren.
Danke schonmal und schönen Abend noch
Mfg
-
Sorry, die Member von Tuple heißen natürlich aInst ( Typ A ) und bInst ( Typ B ).
-
Okay, Frage gelöst. Eine einfache Änderung am dem Funktionsheader löst die Frage automatisch.