Cannot handle exception type thrown by implicit su

2020-07-17 07:48发布

问题:

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(

回答1:

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.



回答2:

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");
        }
    }
}