Daniel: Auf Objects in Vector zugreifen

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

  1. 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