Neues Objekt von einer Referenz erstellen ?!



  • Ich habe das Problem, dass ich in meiner Hauptklasse einen Vector mit Daten habe, der in einer Nebenklasse gebraucht wird - das sieht dann folgendermaßen aus:

    public class Hauptklasse{
       public Vector<Daten> dataVec ...
       private void erzeugeNebenklasse(){
          new Nebenklasse(this);
       }
    }
    
    public class Nebenklasse{
       private Vector<Daten> dataVec;
       public Nebenklasse(Hauptklasse mainClass){
          /*
           *hier hakt's, denn es soll keine Referenz auf den Vector der
           *Hauptklasse geben, dieser soll const sein ...
           */
          this.dataVec = new Vector<Daten>mainClass.dataVec); //geht nicht !?
          this.dataVec = (Vector<Daten>)mainClass.dataVec.clone(); //geht nicht!?
       }
       private void editDataVec(){
          dataVec(somePosition) = new Daten();
       }
    }
    

    Das Vector-Objekt der Hauptklasse wird immer mitverändert, wenn ich die "editDataVec()" methode aufrufe ... Warum das? Wie kann ich sonst ein neues, identisches Objekt erzeugen? Oder bin ich völlig auf dem Holzweg? Fragen über Fragen 😃
    MFG John



  • Hallo,
    wie wäre es wenn du in der konstruktur der nebenklasse einen neuen vector erzeugst und du läufst in eine enumeration oder schleife unf fügst jeden element aus vector der hauptklasse in vector der neben klasse. du musst am enddefekt eine kopie des vectors haben.

    public Nebenklasse(Hauptklasse mainClass){
          this.dataVec = new Vector<Daten>();
          for(Enumeration e;mainClass.datavec.elements;e.hasMoreElements()) 
         {
              this.datavec.addElement(e.nexelement());
         }
    

    den code habe ich nicht getestet.

    CU
    Youssef



  • Ginge schon, ich könnte auch die daten direkt nochmal aus der datenbank einlesen, jedoch leidet die Performance ein wenig, wenn die DB sehr groß ist und außerdem erklärt mir das leider immer noch nicht, warum der in meinem const Objekt rumpfuscht, kann mir das jemand erläutern?



  • Also Problem gefunden:
    clone() sollte doch funktionieren, habe bloß dummerweise die Refrenzen der Objekte aus dem alten Vector kopiert ...
    Lösung:

    private Vector<Element> method(Vector<Element> oldVec){
       Vector<Element> newVec = new Vector<Element>();
       for(Element e : oldVec)
          newVec.add(e.clone()); //clone() überschrieben mit generics
       return newVec;
    }
    

Anmelden zum Antworten