Auf Objects in Vector zugreifen
Daniel
- java
0 Slyh
Hallo zusammen
Ich habe einen Vector v in welchem Objekte, z.B. vom Typ "Book" gespeichert sind. Die Klasse Book hat dann z.B. die Klassenvariabeln Titel, Autor...usw.
Bis jetzt habe ich immer mit einem Typecast auf die Elemente des Vectors zugegriffen...:
(Book)v.elementAt(i).title
(Book)v.elementAt(i).author
...
Jetzt die Frage: 1. Wie kann ich auf alle Eigenschaften dieser Objekte zugreifen ohne dass ich deren Namen kenne? (ich weiss also nicht, dass das Objekt book im Vector v die Eigenschaften title und author besitzt. In einer Schleife? Wie?
Das Problem ist nämlich, dass ich mir die folgende WIEDERVERWENDBARE Methode geschrieben habe und die Werte im File dann letztendlich im Stil von
1;title;author;
2;title2;author2;
ins File geschrieben werden sollen. Ich möchte aber nur den Vector übergeben, die Methode soll letztendlich selbst herausfinden wieviele und welche Eigenschaften das Objekt book im Array v hat.
public void writeFile(Vector vData, String file) {
//Schreibt von Vector in File
String strLine="";
try {
PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(file)));
for(int i=0;i<vData.size();i++) {
pw.println(vData.elementAt(i));
}
pw.close();
} catch(IOException e) {}
catch(NoSuchElementException e) {}
catch(IllegalArgumentException e) {}
}
Tönt also ziemlich umständlich, macht aber in meinem Fall Sinn da ich auch noch andere Vectoren mit anderen Objekten in ein anderes File schreiben möchte.
Lasse mich aber gerne belehren.
Gruss Daniel
Hallo,
Ich habe einen Vector v in welchem Objekte, z.B. vom Typ "Book" gespeichert sind. Die Klasse Book hat dann z.B. die Klassenvariabeln Titel, Autor...usw.
Bis jetzt habe ich immer mit einem Typecast auf die Elemente des Vectors zugegriffen...:
(Book)v.elementAt(i).title
(Book)v.elementAt(i).author
...
Nein, du hast so darauf zugegriffen: ((Book)v.elementAt(i)).title
Jetzt die Frage: 1. Wie kann ich auf alle Eigenschaften dieser Objekte zugreifen ohne dass ich deren Namen kenne? (ich weiss also nicht, dass das Objekt book im Vector v die Eigenschaften title und author besitzt.
Diese Frage ergibt keinen Sinn. Wenn du die Klasse (Book) kennst, dann
weißt du auch welche Instanzvariablen sie hat. Wenn sie nur eine
Variable "title" und eine Variable "author" hat, dann hat sie eben
nur diese Variablen. Du mußt nicht zur Laufzeit herausfinden, welche
Variablen sie hat.
Was du willst, ist eine Klasse, zu der man dynamisch Instanzvariablen
hinzufügen kann (oder so ähnlich). Soetwas gibt es nicht.
Verwende stattdessen z.B. eine Hashtable, in der die Buch-Eigenschaften
(title, author usw) abgelegt werden. Die Schlüssel der Hashtable sind
dann eben "title", "author", ...
Was du als jeweiligen Wert verwendest, hängt von deiner
Implementierung ab. Du könntest den Schlüsseln jeweils einen Vector
zuweisen. In diesen schreibst du dann die Werte aller Bücher für die
jeweilige Buch-Eigenschaft.
Grob veranschaulicht:
Hashtable ht = new Hashtable();
Vector titleVector = new Vector();
ht.put("title", titleVector);
titleVector.add("J.K. Rowling");
titleVector.add("Douglas Adams");
ht.put("author", authorVector);
authorVector.add(....);
Du mußt entscheiden, ob dir diese Vorgehen paßt.
Gruß
Slyh