Objekte klonen und Deep Copy

Schwupsi

Aktives Mitglied
Hi Leute!

Zur Übung soll ich eine Subklasse von "Vector" erzeugen, ich nenne sie "DeepCopy" und soll darin die geerbte add()-Methode überschreiben und entsprechend implementieren. Habe in der Klasse Vector nachgeschaut und habe gesehen dass diese Methode einen boolean zurückgibt. Warum? Sollte sie nicht void sein und einfach ein Object in die Collection "adden" (add-Methode) und nichts zurückgeben?

Die Aufgabe:
"Überschreiben Sie in DeepCopy die geerbte Methode add(Object), so dass das angegebene „Object“ dem DeepCopy nur hinzugefügt wird, wenn es ein Object der Klasse "X" oder "Y" ist und nicht von anderen."

Und wie sieht dann der Code in der add()-Methode aus? Habe hier keinen Ansatz zustande bekommen, mich irritiert das boolean. Hätte hier evtl. mit instanceof geprüft aber scheint mir zu schwammig..
Hoffe auf hilfreiche Tipps, Gruß!
 

Schwupsi

Aktives Mitglied
Danke für die Antwort.

Habe das jetzt so gelöst:
Nehmen wir an die Collection soll nur Objekte der Klassen X und Y aufnehmen.
Java:
public boolean add(Object object){
if(object instanceof X){
return true;
}
if(object instanceof Y){
return true;
}
return false;
}

Das wäre mein Ansatz.. Wenn ich dann in der main() 2 Objekte adde und dann .get(0) und .get(1) mache kommt eine Exception, da nichts geaddet wurde. Ich denke, das liegt an der add() Methode, aber ich bin da etwas überfordert was den Code angeht, bisher waren die add() Methoden immer vorgegeben von der Superklasse und jetzt muss ich eine selbst schreiben, verstehe das nicht so ganz.
 

InfectedBytes

Top Contributor
da deine add methode das objekt auch hinzufügen soll, muss es natürlich in deine add methode.
super.add ruft dann die add methode der elternklasse auf
 

Schwupsi

Aktives Mitglied
Habe wieder ein kleines Problem. Ich habe eine Collection-Klasse "HuehnerHof" erstellt die von ArrayList erbt, und in der ich die add() Methode so überschreiben soll, dass keine doppelten Einträge möglich sind. Wie sieht da die if-Bedingung aus? :/
Habe erstmal ohne die if-Bedingung weitergemacht...

In einer anderen Test-Klasse habe ich davon eine Collection angelegt, die nur bestimmte Objekte annimmt.

HuehnerHof<Henne> hhof = new HuehnerHof<Henne>();

Habe dann in einer for-Schleife einige Objekte geaddet und soll dann mittels einer foreach Schleife prüfen ob es sich bei den Objekten um Objekte von "Henne" handelt.
Die einzig mögliche Version, bei allen anderen spackt der Compiler rum:
for(Object a : hhof){ <------ Fehler
assertTrue(a instanceof Henne);
}

Eigentlich richtig, oder? Wenn ich den Code ausführe zeigt er mir in der Zeile "for(Object a:hhof)" den Fehler
 

Schwupsi

Aktives Mitglied
Es gibt eine Klasse "Henne" und eine Klasse "Ei".

Ei hat einen Konstruktor der zwei Werte erwartet. Henne hat einen Konstruktor der einen Wert und ein Ei-Objekt erwartet.

Java:
String name;
Ei ei;

Henne(String name, Ei ei){
this.name = name;
this.ei = ei;
}

String farbe;
double groesse;

Ei(String farbe, double groesse){
this.farbe = farbe;
this.groesse = groesse;
}

Also hat das Henne-Objekt quasi ein Ei.

Ich soll dann in der Klasse "Test" mehrere Hennen erzeugen (mit Ei), in eine Collection (Klasse "HuehnerHof") adden,
Java:
public class HuehnerHof<T> extends ArrayList implements Collection, Set{

@Override
public boolean add(Object obj){
if(this.contains(obj)){
return false;
}else{
super.add(obj);
return true;
}

}


}





und danach mit einer foreach-Schleife nacheinander prüfen, ob es sich um das jeweilige Objekt in der Collection tatsächlich um eine "Henne" handelt.

Java:
public void testHuehner(){
HuehnerHof<Henne> hhof = new HuehnerHof<Henne>();
for(int i = 0; i < 101; i++){
hhof.add(new Henne("Henne"+i; new Ei("blau", i)));
}

for(Object a : hhof){
assertTrue(a instanceof Henne);
}

}

Entweder ich hab foreach nicht verstanden oder der Fehler liegt woanders.
 
Zuletzt bearbeitet:

InfectedBytes

Top Contributor
erstmal, HuehnerHof ist generisch und sollte den generischen Parameter auch weitergeben: extends ArrayList<T>

Ansonsten hast du nen syntaxfehler: hhof.add(new Henne("Henne"+i;new Ei("blau", i)));
anstatt einem komma hast du bei den Parametern ein Semikolon geschrieben
 

Schwupsi

Aktives Mitglied
erstmal, HuehnerHof ist generisch und sollte den generischen Parameter auch weitergeben: extends ArrayList<T>

Ansonsten hast du nen syntaxfehler: hhof.add(new Henne("Henne"+i;new Ei("blau", i)));
anstatt einem komma hast du bei den Parametern ein Semikolon geschrieben

Das mit dem Syntaxfehler war ein Fehler meinerseits, beim Schreiben des Codes in diesem Beitrag. Das Original ist selbstverständlich ein Komma, statt Semikolon, aber danke! :)

Wenn ich "ArrayList<T>" setze, dann zeigt Eclipse einen Fehler in der add() Methode von HuehnerHof:
"The method add(T) in the type ArrayList<T> is not applicable for the arguments (Object)"

Java:
    @Override
    public boolean add(Object obj) {
        if(this.contains(obj)){
            return false;
        }else{
            super.add(obj);
            return true;
        }
    }

Java:
public class HuehnerHof<T> extends ArrayList<T> implements Collection, Set


Und HuehnerHof ist unterstrichen und zeigt folgendes:
"The interface Collection cannot be implemented more than once with different arguments: Collection<T> and Collection"

Bin echt verzweifelt, mich nervt das total, da fixt man das eine Problem und irgendwo wartet schon das nächste.. :/
 

InfectedBytes

Top Contributor
wenn du den generischen Typen an ArrayList weitergibst, dann weiß Java, dass du eben nicht Object, sondern T als Typen verwenden möchtest, dadurch verlangt die add Methode auch nicht mehr nur Object, sondern den Typen T. Bei collection und set solltest du den Typen auch mitgeben
 

Schwupsi

Aktives Mitglied
Ok, verstanden soweit. Habe jetzt auch Collection und Set den generischen Typen <T> mitgegeben. Jetzt ist der Aufruf der add() Methode der Superklasse rot unterstrichen "super.add(object);"

Hier bietet mir Eclipse zwei Fixes an:
Cast zu T -> "super.add((T) object);"
oder statt add(Object object) -> add(T object)

Kann mir aber kaum vorstellen, dass T richtig sein soll :D
 

InfectedBytes

Top Contributor
Schau dir am besten mal das Thema generische Typen nochmal an.

Die add Methode ist in ArrayList wie folgt definiert:
Java:
public boolean add(T obj) {
...
}
Dementsprechend musst du bei dir auch das T angeben.
 

Schwupsi

Aktives Mitglied
Edit: mit T zeigt er zwar keine Compile-Fehler mehr an, aber es hakt trotzdem immer noch an der foreach Schleife, warum? Werde mich dann mal in generische Typen einlesen, wenn ich Zeit habe. Aber kann mir mal jemand sagen wie ich das ganze verdammte Ding zum Laufen kriege? :D

Java:
public void testHuehner(){
HuehnerHof<Henne> hhof = new HuehnerHof<Henne>();
for(int i = 0; i < 101; i++){
hhof.add(new Henne("Henne"+i; new Ei("blau", i)));
}

for(Object a : hhof){
assertTrue(a instanceof Henne);
}

}
 

InfectedBytes

Top Contributor
was genau hakt denn? Eine genauere Fehlerbeschreibung wäre gut^^
Ansonsten hier mal ein minimal Beispiel, was wunderbar funktioniert:
Java:
class HuenerHof<T> extends ArrayList<T> { }
Java:
HuenerHof<Henne> h = new HuenerHof<Henne>();
h.add(...);
h.add(...);
for(Henne henne : h) {
  System.out.println(henne);
}
 

Schwupsi

Aktives Mitglied
was genau hakt denn? Eine genauere Fehlerbeschreibung wäre gut^^
Ansonsten hier mal ein minimal Beispiel, was wunderbar funktioniert:
Java:
class HuenerHof<T> extends ArrayList<T> { }
Java:
HuenerHof<Henne> h = new HuenerHof<Henne>();
h.add(...);
h.add(...);
for(Henne henne : h) {
  System.out.println(henne);
}

Er zeigt mir in der Zeile:
Java:
for(Henne henne : h)
eine NullPointerException.

Wenn ich das richtig verstanden habe, heißt das, dass der Iterator an der Stelle 0 ein null-Objekt vorfindet oder?
Aber ich habe vorher mit einer for-Schleife 100 Objekte erzeugt und der Collection bzw. der ArrayList geaddet.
 

InfectedBytes

Top Contributor
am besten solltest du den StackTrace posten.
Entweder ist halt dein HuenerHof null oder beim iterator ist irgendwas null.
Der StackTrace gibt da mehr auskunft
 

Schwupsi

Aktives Mitglied
java.lang.NullPointerException
at ueb.huehner.TestHuehner.test101Hennen(TestHuehner.java:17)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at junit.framework.TestCase.runTest(TestCase.java:176)
at junit.framework.TestCase.runBare(TestCase.java:141)
at junit.framework.TestResult$1.protect(TestResult.java:122)
at junit.framework.TestResult.runProtected(TestResult.java:142)
at junit.framework.TestResult.run(TestResult.java:125)
at junit.framework.TestCase.run(TestCase.java:129)
at junit.framework.TestSuite.runTest(TestSuite.java:255)
at junit.framework.TestSuite.run(TestSuite.java:250)
at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:131)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
 

Schwupsi

Aktives Mitglied
Java:
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.Set;

public class HuehnerHof<T> extends ArrayList<T> implements Collection<T>, Set<T> {

    @Override
    public boolean add(T obj) {
        if(this.contains(obj)){
            return false;
        }else{
            super.add(obj);
            return true;
        }
    }


Der Konstruktor von "Henne" erwartet einen (String) Namen und ein Objekt Ei.
Der Konstruktor von "Ei" erwartet eine (String) Farbe und eine Größe (double)
Java:
import junit.framework.TestCase;



public class TestHuehner extends TestCase{
 
    public void testHennen(){
        HuehnerHof<Henne> hhof = new HuehnerHof<Henne>();
        for(int i = 0; i<101; i++){
            hhof.add(new Henne("Henne"+i, new Ei("blau", i)));
        }
        try{
            for(Henne h : hhof){
                System.out.println(h);
            }
            }catch(Exception e){
                e.printStackTrace();
            }
    }
 

Schwupsi

Aktives Mitglied
der Code funktioniert so bei mir Einwandfrei

Dein Ernst? Oh man.. bei mir ist der JUnit Test zwar erfolgreich, aber dennoch zeigt er eine NullPointerException, fuck...

Wenn ich ganz normal statt der foreach Schleife, eine for-Schleife durchlaufen lasse mit System.out.println(hhof.get(x)); dann gibt er mir alle Objekte aus.. seltsam
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
I Zapier -> wie werden Objekte gespeichert? Java Basics - Anfänger-Themen 10
S Java: Wie sortiere ich eine ArrayList benutzerdefinierter Objekte nach einem bestimmten Attribut? Java Basics - Anfänger-Themen 2
K Hab ich dass so richtig erklärt (Objekte und Referenzen)? Java Basics - Anfänger-Themen 5
J Objekte in JSON speichern?? Java Basics - Anfänger-Themen 1
I Objekte in ShareProject speichern um später zu nutzen Java Basics - Anfänger-Themen 4
J Objekte Java Basics - Anfänger-Themen 22
T Objekte mit arrays erstellen Java Basics - Anfänger-Themen 6
Hzrfa Objekte, Referenz Java Basics - Anfänger-Themen 5
T 3D Objekte verarbeiten Java Basics - Anfänger-Themen 2
N Welche Objekte kann man zu einem Set hinzufügen Java Basics - Anfänger-Themen 4
I XML einlesen und Objekte bekommen Java Basics - Anfänger-Themen 2
W Objekte einer ArrayList in txt-datei schreiben mit Paths? Java Basics - Anfänger-Themen 2
Encera Zugriff auf Map-Objekte Java Basics - Anfänger-Themen 3
E Objekte löschen Java Basics - Anfänger-Themen 9
P Array-Objekte-Aufruf Java Basics - Anfänger-Themen 22
Encera Auf Objekte aus anderer Klassen zugreifen Java Basics - Anfänger-Themen 20
P Zähler Variable für mehrere Objekte Java Basics - Anfänger-Themen 6
B Objekte verschwinden beim Übersetzen Java Basics - Anfänger-Themen 5
D Zwei verschiedene Intellij Projekte, wie benutze ich wechselseitig objekte Java Basics - Anfänger-Themen 8
E Rekursiv Objekte erzeugen - geht das? Java Basics - Anfänger-Themen 2
T Collections Sind Subklassen-Objekte in Listen mit Generics erlaubt? Java Basics - Anfänger-Themen 16
F Aus eingelesener Datei korrekt Objekte erzeugen Java Basics - Anfänger-Themen 5
G Übergeordnete Objekte abrufen Java Basics - Anfänger-Themen 9
B Bin komplett am verzweifeln :( Verkettete Liste die Objekte hat Attribut auslesen Java Basics - Anfänger-Themen 14
A Objekte mit Parametern in eine Liste packen Java Basics - Anfänger-Themen 19
B Objekte, bspw. konkret Arraylists,manuell aus Speicher löschen? Java Basics - Anfänger-Themen 70
S Objekte von zwei klassen in zwei verschiedene Textdateien schreiben Java Basics - Anfänger-Themen 5
D Wie Objekte im JFrame frei bewegen lassen? Java Basics - Anfänger-Themen 3
Spandeli8 Erzeugte Objekte gegenüber Bildern hervorheben in Java Processing Java Basics - Anfänger-Themen 1
J Zwei Objekte vergleichen Java Basics - Anfänger-Themen 8
L Werte von Objekte addieren Java Basics - Anfänger-Themen 14
U Objekte in LinkedList löschen und editieren Java Basics - Anfänger-Themen 14
W Objekte über Scanner Input; ToString Probleme... Java Basics - Anfänger-Themen 4
J Problem mit einer Methode, die beliebig viele Objekte in Array speichern soll Java Basics - Anfänger-Themen 6
G Methoden Informationen aus zwei Objekte bekommen? Java Basics - Anfänger-Themen 6
P Globale Objekte Java Basics - Anfänger-Themen 2
C Nachträglich neue grafische Objekte hinzufügen Java Basics - Anfänger-Themen 7
D Interaktion zweier Objekte Java Basics - Anfänger-Themen 5
M Objekte in Array speichern und ausgeben Java Basics - Anfänger-Themen 17
S Objekte indiziert erstellen Java Basics - Anfänger-Themen 27
M Warum dürfen Objekte einer Klasse auf statische Variablen dieser Klasse referenzieren? Java Basics - Anfänger-Themen 10
M Objekte mittels equals vergleichen Java Basics - Anfänger-Themen 14
C Fernseher-Aufgabe (Methoden, Klassen und Objekte) Java Basics - Anfänger-Themen 63
N Typebound Objekte einer Arraylist hinzufügen Java Basics - Anfänger-Themen 7
A (Objekte Java Basics - Anfänger-Themen 6
Y Klassen Klassen und Objekte Java Basics - Anfänger-Themen 3
Y Klassen Klassen und Objekte mit set und get Java Basics - Anfänger-Themen 0
U Objekte in einer LinkedList sortieren Java Basics - Anfänger-Themen 5
N Methode um Objekte einer Liste hinzuzufügen Java Basics - Anfänger-Themen 1
G Java Objekte auf Duplikate testen Java Basics - Anfänger-Themen 4
B Neue Liste erstellen, wenn Objekte bestimmte Referenz hat / Gruppierung von Einträgen Java Basics - Anfänger-Themen 12
M Implementieren einer Datenstruktur, welche nur 5 Objekte speichert Java Basics - Anfänger-Themen 3
M Objekte miteinander vergleichen Java Basics - Anfänger-Themen 18
C Verschiedene Objekte in einer Liste speichern Java Basics - Anfänger-Themen 6
J Java GUI- Objekte Position per Quelltext bestimmen Java Basics - Anfänger-Themen 4
G Objekte in Methoden? Java Basics - Anfänger-Themen 13
H Auf Objekte bzw Variabeln aus einer anderen Methode zugreifen Java Basics - Anfänger-Themen 7
S Frage Klasse und Objekte Java Basics - Anfänger-Themen 2
K Boolean in einer Methode um 2 Objekte zu vergleichen Java Basics - Anfänger-Themen 12
I Objekte Hilfe Java Basics - Anfänger-Themen 8
G Klassen und Objekte Java Basics - Anfänger-Themen 2
W Verschachtelte Objekte wieder auspacken Java Basics - Anfänger-Themen 3
R Attribute mehrerer Objekte ausgeben Java Basics - Anfänger-Themen 3
C Objekte und Konstruktoren Java Basics - Anfänger-Themen 2
F Erstellen zweier Objekte mit dem selben Inhalt Java Basics - Anfänger-Themen 1
O ObjectOutputStream Anzahl Objekte festhalten Java Basics - Anfänger-Themen 17
R Objekte aus Array als String + kommasepariert speichern Java Basics - Anfänger-Themen 12
X Objekte einer ArrayList richtig ausgeben? Java Basics - Anfänger-Themen 8
J Best Practice Dateiinhalte validieren und auf Objekte mappen Java Basics - Anfänger-Themen 3
B Automatisch Objekte erzeugen mit verschiedenen Namen Java Basics - Anfänger-Themen 4
der_Schokomuffin Hilfe gesucht beim Thema Objekte übergeben! Java Basics - Anfänger-Themen 2
S Konstruktor, Objekte Java Basics - Anfänger-Themen 4
PaperHat Objekte in Array vergleichen Java Basics - Anfänger-Themen 9
B HTML Code / Seite auslesen und JAVA Objekte erstellen Java Basics - Anfänger-Themen 12
PaperHat Programmieraufgabe - Objekte in Objekten Java Basics - Anfänger-Themen 2
E Methode mit Parametern um Objekte zu übergeben Java Basics - Anfänger-Themen 4
V Collections Objekte einer ArrayList in der main() ausgeben Java Basics - Anfänger-Themen 9
T Klassen Klassenübergreifende Objekte erstellen lassen Java Basics - Anfänger-Themen 5
A Objekte verknüpfen Java Basics - Anfänger-Themen 2
M Objekte mit einer Schleife mehrmals erzeugen Java Basics - Anfänger-Themen 17
B Klassen Alle Unter-Objekte durchlaufen in der Hauptklasse Java Basics - Anfänger-Themen 10
B Objekte zählen/ Vererbung/ Kopplung/ Interface/ Abstract Class Java Basics - Anfänger-Themen 5
S Zählen der Zeiger auf Objekte Java Basics - Anfänger-Themen 35
J Methoden Equals Methode für Integer und Objekte überschreiben? Java Basics - Anfänger-Themen 9
B Erste Schritte Objekte von JFrame der Fenstergröße anpassen Java Basics - Anfänger-Themen 3
M Klassen und Objekte Java Basics - Anfänger-Themen 2
J Objekte und Abstrakte Klassen Java Basics - Anfänger-Themen 2
J Array Objekte einer Klasse zuordnen Java Basics - Anfänger-Themen 15
H Interface Objekte speichern und laden (serialisieren/deserialisieren) Java Basics - Anfänger-Themen 1
Orkanson Objekte in ein Array einfügen Java Basics - Anfänger-Themen 5
X Objekte in ArrayList einfügen Java Basics - Anfänger-Themen 10
L Vorherige Objekte zählen und ausgeben Java Basics - Anfänger-Themen 11
Orkanson Objekte und Klassen Java Basics - Anfänger-Themen 8
R Objekte zur Laufzeit in Schleife erzeugen und in ArrayList ablegen Java Basics - Anfänger-Themen 4
D Objekte-Fragen Java Basics - Anfänger-Themen 1
T Objekte in der Methode Java Basics - Anfänger-Themen 8
F Alle Objekte einer Klasse nach Eigenschaft durchsuchen Java Basics - Anfänger-Themen 8
R Interface Eigene Objekte in Listen sortieren mit Interface Comparable Java Basics - Anfänger-Themen 5
E Eine Instanzvariable und zwei Objekte Java Basics - Anfänger-Themen 14
N Objekte in ArrayList finden Java Basics - Anfänger-Themen 10

Ähnliche Java Themen

Neue Themen


Oben