I am trying to create a copy constructor considering the object is mutable. My copy constructor is wrong; I can't seem to figure out what I am doing wrong.
Please do NOT tell me to use clone()
. How would I complete the copy constructor in this situation? I am new to Java and would really appreciate any help.
public class MyList {
public ArrayList<Cool> people;
/**
* "people" variable as a new (empty) ArrayList of Cool objects.
*/
public MyPersonList()
{
people = new ArrayList<Cool>(0);
}
/**
* A copy constructor which makes the right kind of copy considering
* a Cool is mutable.
*/
public MyList(MyList other)
{
people = new ArrayList<Cool>();
for(Cool p:people)
{
people.add(p);
}
}
Note: Cloning the lists, isn't the same as cloning the elements in the list.
None of these approaches work the way you want them to:
//1
people = new ArrayList<Cool>(other.people);
//2
people = new ArrayList<Cool>();
for(Cool p : other.people) {
people.add(p);
}
The approaches above will fill people
such that it contains the same elements as other.people
.
However, you don't want it to contain the same elements. You want to fill it with clones of the elements in other.people
.
The best approach would be something like this:
people = new ArrayList<Cool>(other.people.size());
for(Cool p : other.people) {
people.add((Cool)p.clone());
}
Make sure Cool
implements Cloneable
. Override clone()
if necessary.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With