Kopierkonstrukter eines Objekts mit final Attributen

skuki

Aktives Mitglied
Hallo,

für ein Backup muss ich ein paar Objekte in eine ArrayList speichern.

Hierzu müssen die Objekte kopiert werden, da sie später auch wieder verändert werden können.

Wie kann ich aber ein Objekt kopieren dass final Variablen besitzt? Denn ich kann hier ja keine setter Verwenden.

Würde mich über einen Tipp freuen 🙂


Hier noch mein Code

Code:
public class Person {
        
    
        
	private String name;
	private final int ID;
	
	private ArrayList<Articles> articles = new ArrayList<Articles>();
	
        // Konstruktor
	public Person(String name){
		
		this.setName(name);
		ID = (this.hashCode() + (int) System.currentTimeMillis());		
	}
	
	
	public Person(Person p){
		
		Person person = new Person(p.getName());
		person.setArticles(p.getArticles());
		// person.ID = p.getId();
		
	}

lg
 
Zuletzt bearbeitet:
Du eine Klasse A mit final Variablen.
Ein paar dieser Objekte willst du kopieren und in einer ArrayList speichern da diese Objekte fürs Backup wichtig sind.

Das kopieren von den Ursprungsobjekten sollte eigentlich kein Problem sein.
Biete einen entsprechenden Konstruktor an der alle Attribute entgegen nehmen kann.
 
Also in deinem Posting fehlt noch die Fehlerbeschreibung.

Ich kann mir schon denken, wo der Fehler ist. Mit dem Copy Konstruktor erzeugst du zwei Objekte.

In dem Copy Konstruktor solltst du die Member kopieren und nicht den (Sting ...) Konstruktor aufrufen.
 
Code:
	public Person(Person p){
		Person person = new Person(p.getName());
		person.setArticles(p.getArticles());
		// person.ID = p.getId();
		
	}

Im Konstruktor einer Klasse (welcher als Parameter ein Objekt dieser Klasse erwartet) erzeugst du ein neues Objekt dieser Klasse.
Sehr verwirrendes Konstrukt.

Auch wenn dein Attribut "final" und "private" ist. In der Klasse selber kannst du auch auf "private" Attribute eines Objektes zugreifen. Und im Konstruktor ist es auch erlaubt ein final Attribut zu setzen.
 
Würde aus einer methode auch gehen.

Nein das Setzen eines "final" Attributes innerhalb einer Methode würde den Sinn von "final" in Frage stellen, und es ist nicht möglich ein final Attribut außerhalb des Konstruktors (bzw. direkt bei der Deklaration) zu initalisieren.

Verzeihe mir, falls ich deine Antwort falsch gedeutet habe.
 
Zuletzt bearbeitet:
Stimmt sogar. 😉 - Sorry.

---

Dennoch kann er die ID aus dem übergebenen Objekt im CopyKonstruktor setzen.

Von Apache gibt es BeanUtils? damit lassen sich Objekte auch via DEEP COPY kopieren.
 

Neue Themen


Zurück
Oben