Search code examples
javadeep-copycopyonwritearraylist

Creating a <Fish> arrayList deep copy


For whatever reason, when I try and create a deep copy for the plant array list, I get a null pointer exception and I don't know why.

/**
 * Copy Constructor. Since landscape is immutable in the scope of our
 * project, you could do a simple reference copy for it. However, Fish and
 * Plants are mutable, so those lists must be copied with a DEEP copy! (In
 * other words, each fish and each plant must be copied.)
 */



private ArrayList<Fish> fish;
private ArrayList<Plant> plants;
private int[][] landscape;

public Model(Model other) {
    this.landscape = other.landscape;

    for(Fish fishy: other.fish){
        this.fish.add(new Fish(fishy));
    }

    for(Plant planty: other.plants){
        this.plants.add(new Plant(planty));
    }
}

Solution

  • You have not initialized fish and plants

    public Model(Model other) {
        fish = new ArrayList<Fish>();
        plants = new ArrayList<Plant>();
        this.landscape = other.landscape;
    
        for(Fish fishy: other.fish){
            this.fish.add(new Fish(fishy));
        }
    
        for(Plant planty: other.plants){
            this.plants.add(new Plant(planty));
        }
    }