user1830307
user1830307

Reputation:

Cannot handle exception type thrown by implicit super constructor

I have a Cage class:

public class Cage<T extends Animal> {

    Cage(int capacity) throws CageException {
        if (capacity > 0) {
            this.capacity = capacity;
            this.arrayOfAnimals = (T[]) new Animal[capacity];                                                       
        }

        else {
            throw new CageException("Cage capacity must be integer greater than zero");
        }
    }
}

I am trying to instantiate an object of Cage in another class main method:

private Cage<Animal> animalCage = new Cage<Animal>(4);

I get the error: "Default constructor cannot handle exception type CageException thrown by implicit super constructor. Must define an explicit constructor." Any ideas? :o(

Upvotes: 4

Views: 13828

Answers (2)

Reimeus
Reimeus

Reputation: 159754

You could use a use a helper method in the class where Cage gets instantiated:

class CageInstantiator {
    private Cage<Animal> animalCage = getCage();

    private static Cage<Animal> getCage() {
        try {
            return new Cage<Animal>(4);
        } catch (CageException e) {
            // return null; // option
            throw new AssertionError("Cage cannot be created");
        }
    }
}

Upvotes: 2

greedybuddha
greedybuddha

Reputation: 7507

This means that in the constructor of your other class you are creating the Cage class, but that constructor isn't properly handling the exception.

So either just catch the exception when you create the Cage class in the other constructor, or make the constructor throws CageException.

Upvotes: 4

Related Questions