Hallo,
ich arbeite momentan an einem Plugin(OSGi) Tracker welches Plugins die in einem Netzwerk oder einer OSGi Platform laufen aufspürt und alle Interfaces und deren angebotenen Methoden anzeigt.
Nun kann man als User so eine Methode anklicken und Rechts escheint daraufhin eine Tabelle, welches die Inputs anzeigt die die Methode in der Signatur hat.
Das funktioniert auch alles.
Es werden nur Methoden mit primitive Datentypen in der Signatur unterstützt, da sonst sonst die Eingabe von Input bei anderen Datentypen eher schwirig wird.
Naja soweit läuft alles. Nun sollte ich auch Mehrdimensionale Arrays hinzunehmen. Abfangen solcher Arrays klappt wunderbar. Nun der User baut sich dann je nach Dimension sein Array in einem JTree, im Anschluss hole ich alle Daten in den Blättern ab und packe sie z.B. eine ArrayList. Im nächsten Schritt müsste ich je nach Dimension des Arrays ein m.dim.Array aus den Daten bauen und diese der Methode zurückgeben, da es ja in der Signatur verlangt wird. Genau da ist mein Problem, die Anwendung soll generisch sein, sprich in der Signatur steht z.B.:
int[] [] [] zahlen
Meine Anwendung erkennt das Array in der Signatur korrekt mit drei Dimensionen und setzt die tiefe des vom User zu erzeugenden Baums dementsprechend fest.
Dabei kann der User aber unendliche viele Elternknoten und Datenknoten in der letzten Dimension erzeugen, da ja die Klammern in der Signatur nicht vorinitialisiert sind. Dabei hat der Baum in diesem Fall nur eine Tiefe von maximal drei.
Ich muss also nachdem ich die Daten in einen ArrayIist packe diese entsprechend der Struktur des Baumes, z.B.: 1 Großelternknoten dann 2 Elternknoten und schließlich je Elternknoten zwei Datenknoten,
wäre als Array: int[] [] [] zahlen = new int [1] [2] [2] .
Die Probleme sind also:
- das m.Dim.Array in der Signatur kann beliebig viele Dimensionen haben
- dabei ist das Array nicht initilisiert da ja in der Signatur (int zahlen [][][]...) steht
- somit kann man beliebig viele Elternknoten und Datenknoten erzeugen, wobei dies durch die Tiefe=Dimension beschränkt ist.
- Die Schwierigkeit ist, es lässt sich generisch kein m.Dim.Array erzeugen/initialisieren da ich ja die einzelnen Dimensionen nicht vorher weiß.
Man könnte höchstens mit switch arbeiten z.B.:
Pseudocode:
switch(dimension)
case 2:
int [][] a = new int[Elternknoten aus Baum][Datenknoten aus Baum]
case 3:
int [][][] a = new int[Elternknoten aus Baum][Elternknoten aus Baum][Datenknoten
aus Baum]
usw...
was aber nicht generisch wäre, ich muss ja m.Dim.Arrays mit beliebiger Dim. abfangen...
Habt ihr evtl. Lösungen wie man es implementieren könnte?
In meinen Augen, sehe ich kein Ausweg somit wäre die Unterstützung von m.Dim.Arrays nicht realisierbar da ich keine m.Dim.Arrays generisch erzeugen kann.
Evtl habe ich auch irgendwo einen Denkfehler...
Würde mich über Anregungen und Tipps freuen.
Vielen dank vorab.
gruß
dbzworld
ich arbeite momentan an einem Plugin(OSGi) Tracker welches Plugins die in einem Netzwerk oder einer OSGi Platform laufen aufspürt und alle Interfaces und deren angebotenen Methoden anzeigt.
Nun kann man als User so eine Methode anklicken und Rechts escheint daraufhin eine Tabelle, welches die Inputs anzeigt die die Methode in der Signatur hat.
Das funktioniert auch alles.
Es werden nur Methoden mit primitive Datentypen in der Signatur unterstützt, da sonst sonst die Eingabe von Input bei anderen Datentypen eher schwirig wird.
Naja soweit läuft alles. Nun sollte ich auch Mehrdimensionale Arrays hinzunehmen. Abfangen solcher Arrays klappt wunderbar. Nun der User baut sich dann je nach Dimension sein Array in einem JTree, im Anschluss hole ich alle Daten in den Blättern ab und packe sie z.B. eine ArrayList. Im nächsten Schritt müsste ich je nach Dimension des Arrays ein m.dim.Array aus den Daten bauen und diese der Methode zurückgeben, da es ja in der Signatur verlangt wird. Genau da ist mein Problem, die Anwendung soll generisch sein, sprich in der Signatur steht z.B.:
int[] [] [] zahlen
Meine Anwendung erkennt das Array in der Signatur korrekt mit drei Dimensionen und setzt die tiefe des vom User zu erzeugenden Baums dementsprechend fest.
Dabei kann der User aber unendliche viele Elternknoten und Datenknoten in der letzten Dimension erzeugen, da ja die Klammern in der Signatur nicht vorinitialisiert sind. Dabei hat der Baum in diesem Fall nur eine Tiefe von maximal drei.
Ich muss also nachdem ich die Daten in einen ArrayIist packe diese entsprechend der Struktur des Baumes, z.B.: 1 Großelternknoten dann 2 Elternknoten und schließlich je Elternknoten zwei Datenknoten,
wäre als Array: int[] [] [] zahlen = new int [1] [2] [2] .
Die Probleme sind also:
- das m.Dim.Array in der Signatur kann beliebig viele Dimensionen haben
- dabei ist das Array nicht initilisiert da ja in der Signatur (int zahlen [][][]...) steht
- somit kann man beliebig viele Elternknoten und Datenknoten erzeugen, wobei dies durch die Tiefe=Dimension beschränkt ist.
- Die Schwierigkeit ist, es lässt sich generisch kein m.Dim.Array erzeugen/initialisieren da ich ja die einzelnen Dimensionen nicht vorher weiß.
Man könnte höchstens mit switch arbeiten z.B.:
Pseudocode:
switch(dimension)
case 2:
int [][] a = new int[Elternknoten aus Baum][Datenknoten aus Baum]
case 3:
int [][][] a = new int[Elternknoten aus Baum][Elternknoten aus Baum][Datenknoten
aus Baum]
usw...
was aber nicht generisch wäre, ich muss ja m.Dim.Arrays mit beliebiger Dim. abfangen...
Habt ihr evtl. Lösungen wie man es implementieren könnte?
In meinen Augen, sehe ich kein Ausweg somit wäre die Unterstützung von m.Dim.Arrays nicht realisierbar da ich keine m.Dim.Arrays generisch erzeugen kann.
Evtl habe ich auch irgendwo einen Denkfehler...
Würde mich über Anregungen und Tipps freuen.
Vielen dank vorab.
gruß
dbzworld